javaWEB邮件测试
新建一个工具类:
Mail.java
该类的主要关键点是:1、设置系统属性。也就是你是用什么协议来进行邮件发送的,邮件协议有很多在种,比如impt,smpt,prop等协议,
我现在测试用的是smpt协议,smpt协议里也分为很多种,以为有不同的邮箱QQ,126,新浪等,所以就有不同的smpt系统属性了(注:这些
都可以再网上查到),我用的协议是smpt.qq.com,通过property将它存到map集合里面:props.put("host","smpt.qq.com")
2、准备获取邮件回话对象,通过mail.jar包中Session.getDefaultInstance()来获取回话。
3、准备创建MIME邮件对象,jar包自带的MimeMessage(session)方法
4、设置smtp身份认证:props.put("mail.smtp.auth", "true");
5、定义邮件主题:mimeMsg.setSubject(mailSubject);6、
6、定义邮件内容:bp.setContent("" + mailBody, "text/html;charset=GBK");
7、设置发信人:mimeMsg.setFrom(new InternetAddress(from));
8、定义收信人:mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
9、定义抄送人:mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress .parse(copyto));
以下是源码:
package com.util;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart; public class Mail {
private MimeMessage mimeMsg;
private Session session;
private Properties props;
private Multipart mp; private static String smtp = "smtp.qq.com";// smtp服务器
private static String from = "你的邮箱账号@qq.com";// 邮件显示名称
private static String copyto = "";// 抄送人邮件地址
private static String subject = "找回密码";// 邮件标题
private static String username = "邮箱账号";// 发件人真实的账户名
private static String password = "密码";// 发件人密码 public Mail(String smtp) {
setSmtpHost(smtp);
createMimeMessage();
}
public void setSmtpHost(String hostName) {
System.out.println("设置系统属性:mail.smtp.host=" + hostName);
if (props == null) {
props = System.getProperties();
}
props.put("mail.smtp.host", hostName);
}
public boolean createMimeMessage() {
try {
System.out.println("准备获取邮件会话对象!");
session = Session.getDefaultInstance(props, null);
} catch (Exception e) {
System.out.println("获取邮件会话错误!" + e);
return false;
}
System.out.println("准备创建MIME邮件对象!");
try {
mimeMsg = new MimeMessage(session);
mp = new MimeMultipart(); return true;
} catch (Exception e) {
System.out.println("创建MIME邮件对象失败!" + e);
return false;
}
} /*定义SMTP是否需要验证*/
public void setNeedAuth(boolean need) {
System.out.println("设置smtp身份认证:mail.smtp.auth = " + need);
if (props == null)
props = System.getProperties();
if (need) {
props.put("mail.smtp.auth", "true");
} else {
props.put("mail.smtp.auth", "false");
}
}
public void setNamePass(String name, String pass) {
username = name;
password = pass;
} /*定义邮件主题*/
public boolean setSubject(String mailSubject) {
System.out.println("定义邮件主题!");
try {
mimeMsg.setSubject(mailSubject);
return true;
} catch (Exception e) {
System.err.println("定义邮件主题发生错误!");
return false;
}
} /*定义邮件正文*/
public boolean setBody(String mailBody) {
try {
BodyPart bp = new MimeBodyPart();
bp.setContent("" + mailBody, "text/html;charset=GBK");
mp.addBodyPart(bp);
return true;
} catch (Exception e) {
System.err.println("定义邮件正文时发生错误!" + e);
return false;
}
} /*设置发信人*/
public boolean setFrom(String from) {
System.out.println("设置发信人!");
try {
mimeMsg.setFrom(new InternetAddress(from)); //发信人
return true;
} catch (Exception e) {
return false;
}
} /*定义收信人*/
public boolean setTo(String to) {
if (to == null)
return false;
System.out.println("定义收信人!");
try {
mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
return true;
} catch (Exception e) {
return false;
}
} /*定义抄送人*/
public boolean setCopyTo(String copyto) {
if (copyto == null)
return false;
try {
mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress
.parse(copyto));
return true;
} catch (Exception e) {
return false;
}
} /*发送邮件模块*/
public boolean sendOut() {
try {
mimeMsg.setContent(mp);
mimeMsg.saveChanges();
System.out.println("邮件发送中....");
Session mailSession = Session.getInstance(props, null);
Transport transport = mailSession.getTransport("smtp");
transport.connect((String) props.get("mail.smtp.host"), username, password);
transport.sendMessage(mimeMsg, mimeMsg
.getRecipients(Message.RecipientType.TO));
System.out.println("发送成功!");
transport.close();
return true;
} catch (Exception e) {
System.err.println("邮件失败!" + e);
return false;
}
} /*调用sendOut方法完成发送*/
public static boolean sendAndCc(String to,String content) {
Mail theMail = new Mail(smtp);
theMail.setNeedAuth(true); // 验证 if (!theMail.setSubject(subject))
return false;
if (!theMail.setBody(content))
return false;
if (!theMail.setTo(to))
return false;
if (!theMail.setCopyTo(copyto))
return false;
if (!theMail.setFrom(from))
return false;
theMail.setNamePass(username, password);
if (!theMail.sendOut())
return false;
return true;
} // public static void main(String[] args) {
// String smtp = "smtp.qq.com";// smtp服务器
// String from = "邮箱账号@.qq.com";// 邮件显示名称
// String to = "收件人账号@qq.com";// 收件人的邮件地址,必须是真实地址
// String copyto = "";// 抄送人邮件地址
// String subject = "测试邮件";// 邮件标题
// String content = "你好!这是测试邮件,请不要回复";// 邮件内容
// String username = "你的邮箱账号";// 发件人真实的账户名
// String password = "密码";// 发件人密码
// Mail.sendAndCc(smtp, from, to, copyto, subject, content, username, password);
// }
}
以上代码,经过测试,可以运行成功。注意:
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
当出现以上错误时,恭喜您已经离接收邮件不远了,否则请您解决好所有的异常后再来看这个帖子。
javax.mail和javax.activation这两个包已经在javaEE5当中属于基础包了,就是JDK中自带了已经,但是里面的方法与现在外面的mail.jar和activation.jar有一些出入,所以初学者在直接copy别人代码的时候往往会出现上面的错误。
废话不多说下面是解决方法
进到
X:\Program Files\MyEclipse 6.5\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.5.0.zmyeclipse650200806\data\libraryset\EE_5
这个路径里,可以看到javaee.jar,用rar把这个文件打开,然后进到javax文件夹里,删除mail.jar和activation.jar(我的javaee.jar里,这两个东西是文件夹,总之删掉就OK,不过要注意备份一下)
javaWEB邮件测试的更多相关文章
- 第一个远程javaweb项目测试全过程
2017-5-20,在这个奇特的日子,我不再满足于在本地测试javaweb,于是在上腾讯云买了第一个云服务器,由于是学生认证,所以一个月只要10块钱,还是要抢的,每天早上9点开抢 打开后,发现其实是一 ...
- 用Java发送HTML格式邮件测试类(支持中文)
代码由纯Java写成,支持中文,一目了然,只要将Main函数中的相关信息填写正确就直接用了,便于修改,可以在此类基础上任意扩展成自己的类. 注意做HTML形式的邮件,最好把HTML,CSS都写全,只写 ...
- 通过hmail搭建一个内网测试的邮件服务器
我们测试的软件基本上都是支持邮件功能,如果你的测试环境是在外网的话那还好说,可以直接使用QQ邮箱.163邮箱等.但是如果是测试环境在内网,无法直接访问到外网的时候,搭建一个邮件服务器就很有必 ...
- javaWeb开发小工具---MailUtils及其单元测试
本次介绍的是,在javaWeb开发中,我们不免会遇到发送邮件的需求,比如:用户注册账号,需要激活登录,以及服务器定期向会员发送礼品信息等.所以参考有关资料,写了这个MailUtils工具类. 1.Ma ...
- SQL Server 创建数据库邮件
一. 背景 数据库发邮件通知数据库的运行状态(状态可以通过JOB形式获取)和信息,达到预警的效果. 二. 基础知识 msdb系统数据库保存有关Job,Database Mail,Nodifyicati ...
- Yii2的邮件配置
'components' => [ 'mailer' => [ 'class' => 'yii\swiftmailer\Mailer', 'useFileTransport' =&g ...
- kubuntu+roundcube搭建邮件服务器(包含LAMP)
好久之前写的了,偶然翻到然后拿出来看看,里面文字图片都没改,有错误请见谅 步骤: 一.关于ubuntu的安装二.ubuntu配置LAMP(Linux+Apache+Mysql+Perl/PHP/Pyt ...
- 利用windows服务+timer或者windows任务计划程序+控制台进行进行每日邮件推送
1.邮件发送代码 using System.Text; using System.Net; using System.Net.Mail; using System.Reflection; using ...
- SQL Server代理(4/12):配置数据库邮件
SQL Server代理是所有实时数据库的核心.代理有很多不明显的用法,因此系统的知识,对于开发人员还是DBA都是有用的.这系列文章会通俗介绍它的很多用法. 在以前的文章里我们看到,SQL Serve ...
随机推荐
- 判断php数组维度的小例子
分享一例判断php数组维度的代码,供大家参考. 如下所示: <?php /** * 返回数组的维度 * @param [type] $arr [description] * @return [t ...
- 【PHP】phpcms html去除空白
// 文件路径:/phpcms/libs/classes/template_cache.class.php 42行 // 第四第五行是新增的 $content = $this->template ...
- MySQL 5.7.11 重置root密码
.修改/etc/my.conf,添加参数skip-grant-tables .重启mysql service mysqld stop service mysqld start .用root 直接登录 ...
- Microsoft .NET Framework 3.5 for Windowns Server2012R2 GUI
图形化安装,需要安装盘,不需要网络连接
- Posix 共享内存区
要点 与mmap配合使用 open与shm_open的区别,open打开磁盘上的普通文件,shm_open创建和打开的文件在/dev/shm文件夹下,该文件夹对应的是内存 gcc编译时加参数-lrt ...
- 轻量级远程调用框架-Hessian学习笔记-Demo实现
Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能. 相比WebService,Hessian更简单.快捷.采用的是二进制RPC协议,因为采用的是二进制协 ...
- 调皮的转义之addslashes
背景: php自5.3版本开始废除set_magic_quotes_runtime函数,并在5.4及以后版本中移除了该函数 今天程序在向mysql插入一个serialize序列化后的数组时,由于一个数 ...
- 解决VS2012新建MVC3等项目时,收到加载程序集“NuGet.VisualStudio.Interop…”的错误
vs2012来做一个mvc3的项目,哪知在创建ado数据模型时跳出这么一个东东 错 误: 此模板尝试加载组件程序集 “NuGet.VisualStudio.Interop, Version=1.0.0 ...
- ASP.NET MVC 学习第二天
今天使用mvc完成简单的增删改,内容比较简单,来熟悉一下mvc,数据库操作是用前面的ef,也算是温习一下ef吧. 新建mvc项目,在项目中的Models内添加ef,我这里只操作一下简单的user表.里 ...
- Careercup - Facebook面试题 - 6299074475065344
2014-05-01 01:00 题目链接 原题: Given a matrix with 's. What is the maximum area of the rectangle. In . Ho ...