JavaWeb中JavaMail创建邮件和发送邮件
一、rfc882文档简单说明
rfc882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。
邮件头包含的内容有:
from字段 --用于指明发件人
to字段 --用于指明收件人
subject字段 --用于说明邮件主题
cc字段 -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
bcc字段 -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁
邮件体指的就是邮件的具体内容。
二、mime协议简单介绍
在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,rfc882文档规定的邮件格式就无法满足要求了。
mime协议是对rfc822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把mime协议描述的邮件称之为mime邮件。mime协议描述的数据称之为mime消息。
对于一封复杂邮件,如果包含了多个不同的数据,mime协议规定了要使用分隔线对多段数据进行分隔,并使用content-type头字段对数据的类型、以及多个数据之间的关系进行描述。
三、使用javamail创建邮件和发送邮件
javamail创建的邮件是基于mime协议的。因此可以使用javamail创建出包含图片,包含附件的复杂邮件。
3.1、javamail api的简单介绍
3.2、创建邮件发送测试项目
3.3、发送一封只包含文本的简单邮件
package me.gacl.main; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; /** * @classname: sendmail * @description: 发送email * @author: 孤傲苍狼 * @date: 2015-1-12 下午9:42:56 * */ public class sendmail { /** * @param args * @throws exception */ public static void main(string[] args) throws exception { properties prop = new properties(); prop.setproperty("mail.host", "smtp.sohu.com"); prop.setproperty("mail.transport.protocol", "smtp"); prop.setproperty("mail.smtp.auth", "true"); //使用javamail发送邮件的5个步骤 //1、创建session session session = session.getinstance(prop); //开启session的debug模式,这样就可以查看到程序发送email的运行状态 session.setdebug(true); //2、通过session得到transport对象 transport ts = session.gettransport(); //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。 ts.connect("smtp.sohu.com", "gacl", "邮箱密码"); //4、创建邮件 message message = createsimplemail(session); //5、发送邮件 ts.sendmessage(message, message.getallrecipients()); ts.close(); } /** * @method: createsimplemail * @description: 创建一封只包含文本的邮件 * @anthor:孤傲苍狼 * * @param session * @return * @throws exception */ public static mimemessage createsimplemail(session session) throws exception { //创建邮件对象 mimemessage message = new mimemessage(session); //指明邮件的发件人 message.setfrom(new internetaddress("gacl@sohu.com")); //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发 message.setrecipient(message.recipienttype.to, new internetaddress("gacl@sohu.com")); //邮件的标题 message.setsubject("只包含文本的简单邮件"); //邮件的文本内容 message.setcontent("你好啊!", "text/html;charset=utf-8"); //返回创建好的邮件对象 return message; } }
3.4、发送包含内嵌图片的邮件
package me.gacl.main; import java.io.fileoutputstream; import java.util.properties; import javax.activation.datahandler; import javax.activation.filedatasource; import javax.mail.message; 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; /** * @classname: sendmail * @description: 发送email * @author: 孤傲苍狼 * @date: 2015-1-12 下午9:42:56 * */ public class sendmail { /** * @param args * @throws exception */ public static void main(string[] args) throws exception { properties prop = new properties(); prop.setproperty("mail.host", "smtp.sohu.com"); prop.setproperty("mail.transport.protocol", "smtp"); prop.setproperty("mail.smtp.auth", "true"); //使用javamail发送邮件的5个步骤 //1、创建session session session = session.getinstance(prop); //开启session的debug模式,这样就可以查看到程序发送email的运行状态 session.setdebug(true); //2、通过session得到transport对象 transport ts = session.gettransport(); //3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证 ts.connect("smtp.sohu.com", "gacl", "邮箱密码"); //4、创建邮件 message message = createimagemail(session); //5、发送邮件 ts.sendmessage(message, message.getallrecipients()); ts.close(); } /** * @method: createimagemail * @description: 生成一封邮件正文带图片的邮件 * @anthor:孤傲苍狼 * * @param session * @return * @throws exception */ public static mimemessage createimagemail(session session) throws exception { //创建邮件 mimemessage message = new mimemessage(session); // 设置邮件的基本信息 //发件人 message.setfrom(new internetaddress("gacl@sohu.com")); //收件人 message.setrecipient(message.recipienttype.to, new internetaddress("xdp_gacl@sina.cn")); //邮件标题 message.setsubject("带图片的邮件"); // 准备邮件数据 // 准备邮件正文数据 mimebodypart text = new mimebodypart(); text.setcontent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=utf-8"); // 准备图片数据 mimebodypart image = new mimebodypart(); datahandler dh = new datahandler(new filedatasource("src\\1.jpg")); image.setdatahandler(dh); image.setcontentid("xxx.jpg"); // 描述数据关系 mimemultipart mm = new mimemultipart(); mm.addbodypart(text); mm.addbodypart(image); mm.setsubtype("related"); message.setcontent(mm); message.savechanges(); //将创建好的邮件写入到e盘以文件的形式进行保存 message.writeto(new fileoutputstream("e:\\imagemail.eml")); //返回创建好的邮件 return message; } }
3.5、发送包含附件的邮件
package me.gacl.main; import java.io.fileoutputstream; import java.util.properties; import javax.activation.datahandler; import javax.activation.filedatasource; import javax.mail.message; 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; /** * @classname: sendmail * @description: 发送email * @author: 孤傲苍狼 * @date: 2015-1-12 下午9:42:56 * */ public class sendmail { /** * @param args * @throws exception */ public static void main(string[] args) throws exception { properties prop = new properties(); prop.setproperty("mail.host", "smtp.sohu.com"); prop.setproperty("mail.transport.protocol", "smtp"); prop.setproperty("mail.smtp.auth", "true"); //使用javamail发送邮件的5个步骤 //1、创建session session session = session.getinstance(prop); //开启session的debug模式,这样就可以查看到程序发送email的运行状态 session.setdebug(true); //2、通过session得到transport对象 transport ts = session.gettransport(); //3、连上邮件服务器 ts.connect("smtp.sohu.com", "gacl", "邮箱密码"); //4、创建邮件 message message = createattachmail(session); //5、发送邮件 ts.sendmessage(message, message.getallrecipients()); ts.close(); } /** * @method: createattachmail * @description: 创建一封带附件的邮件 * @anthor:孤傲苍狼 * * @param session * @return * @throws exception */ public static mimemessage createattachmail(session session) throws exception{ mimemessage message = new mimemessage(session); //设置邮件的基本信息 //发件人 message.setfrom(new internetaddress("gacl@sohu.com")); //收件人 message.setrecipient(message.recipienttype.to, new internetaddress("xdp_gacl@sina.cn")); //邮件标题 message.setsubject("javamail邮件发送测试"); //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=utf-8指明字符编码 mimebodypart text = new mimebodypart(); text.setcontent("使用javamail创建的带附件的邮件", "text/html;charset=utf-8"); //创建邮件附件 mimebodypart attach = new mimebodypart(); datahandler dh = new datahandler(new filedatasource("src\\2.jpg")); attach.setdatahandler(dh); attach.setfilename(dh.getname()); // //创建容器描述数据关系 mimemultipart mp = new mimemultipart(); mp.addbodypart(text); mp.addbodypart(attach); mp.setsubtype("mixed"); message.setcontent(mp); message.savechanges(); //将创建的email写入到e盘存储 message.writeto(new fileoutputstream("e:\\attachmail.eml")); //返回生成的邮件 return message; } }
3.6、发送包含内嵌图片和附件的复杂邮件
package me.gacl.main; import java.io.fileoutputstream; import java.util.properties; import javax.activation.datahandler; import javax.activation.filedatasource; import javax.mail.message; 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; import javax.mail.internet.mimeutility; /** * @classname: sendmail * @description: 发送email * @author: 孤傲苍狼 * @date: 2015-1-12 下午9:42:56 * */ public class sendmail { /** * @param args * @throws exception */ public static void main(string[] args) throws exception { properties prop = new properties(); prop.setproperty("mail.host", "smtp.sohu.com"); prop.setproperty("mail.transport.protocol", "smtp"); prop.setproperty("mail.smtp.auth", "true"); //使用javamail发送邮件的5个步骤 //1、创建session session session = session.getinstance(prop); //开启session的debug模式,这样就可以查看到程序发送email的运行状态 session.setdebug(true); //2、通过session得到transport对象 transport ts = session.gettransport(); //3、连上邮件服务器 ts.connect("smtp.sohu.com", "gacl", "邮箱密码"); //4、创建邮件 message message = createmixedmail(session); //5、发送邮件 ts.sendmessage(message, message.getallrecipients()); ts.close(); } /** * @method: createmixedmail * @description: 生成一封带附件和带图片的邮件 * @anthor:孤傲苍狼 * * @param session * @return * @throws exception */ public static mimemessage createmixedmail(session session) throws exception { //创建邮件 mimemessage message = new mimemessage(session); //设置邮件的基本信息 message.setfrom(new internetaddress("gacl@sohu.com")); message.setrecipient(message.recipienttype.to, new internetaddress("xdp_gacl@sina.cn")); message.setsubject("带附件和带图片的的邮件"); //正文 mimebodypart text = new mimebodypart(); text.setcontent("xxx这是女的xxxx<br/><img src='cid:aaa.jpg'>","text/html;charset=utf-8"); //图片 mimebodypart image = new mimebodypart(); image.setdatahandler(new datahandler(new filedatasource("src\\3.jpg"))); image.setcontentid("aaa.jpg"); //附件1 mimebodypart attach = new mimebodypart(); datahandler dh = new datahandler(new filedatasource("src\\4.zip")); attach.setdatahandler(dh); attach.setfilename(dh.getname()); //附件2 mimebodypart attach2 = new mimebodypart(); datahandler dh2 = new datahandler(new filedatasource("src\\波子.zip")); attach2.setdatahandler(dh2); attach2.setfilename(mimeutility.encodetext(dh2.getname())); //描述关系:正文和图片 mimemultipart mp1 = new mimemultipart(); mp1.addbodypart(text); mp1.addbodypart(image); mp1.setsubtype("related"); //描述关系:正文和附件 mimemultipart mp2 = new mimemultipart(); mp2.addbodypart(attach); mp2.addbodypart(attach2); //代表正文的bodypart mimebodypart content = new mimebodypart(); content.setcontent(mp1); mp2.addbodypart(content); mp2.setsubtype("mixed"); message.setcontent(mp2); message.savechanges(); message.writeto(new fileoutputstream("e:\\mixedmail.eml")); //返回创建好的的邮件 return message; } }
以上就是使用javamail的api创建邮件和发送邮件的全部内容,希望对大家的学习有所帮助。
上一篇: ASP.NET 前后台调用方法
下一篇: 如何使用JavaMail发送邮件