************本人水平有限,在学习时请用批判的态度学习,有问题给我留言************
前几天听的方立勋方老师javamail的课程,今天把代码详细注解写一下,加深一下印象,方老师不愧是对邮件发送有深入研究,讲了很多相关的知识,今天也一并记录下来。
方老师讲解javamail之前详细讲解了邮件发送的原理,这里我记录一下用telnet发送邮件的方法。
第一步和邮件服务器打招呼:
Ehlo 主机名(你的计算机名可以随意填写)
Auth login 登陆命令(回车后提示你输入用户名密码)
输入用户名(注意需要时base64编码过的用户名,可以用new sun.misc.BASE64Encoder()).encode( s.getBytes())转码
密码同用户名
Mail from:<你的邮件地址>
Rcpt to:<你发送的邮件地址>
Data(回车后输入正文)
.(结束正文输入)
Quit(结束邮件发送)
邮件中可以加入发送人的地址,可以和mail from中的不一样,也就是说你可以不用知道别人邮箱的密码就用别人的邮箱发送邮件了!!!
邮件服务器搭建
安装邮件服务器 在dns上注册A记录 mx记录
A记录是你的服务器给对方服务器发送邮件时对方服务器会查询的记录,如果记录上有你的邮件服务器的地址,对方将不会要求你输入用户名密码
Mx记录是对方服务器给你的服务器发送邮件是需要查询的记录,如果对方能在dns上查询到你的记录则给你发送邮件,如果查询不到则不发送。
Javamail邮件发送程序详解
package cn.itcast;
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;
/**
* 邮件发送
* 详尽注释每一步做法和含义,方便大家学习
*
* @version 1.0
* @note caohua
* @company 传智博客
*/
public class ComplexMail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();//得到一个properties的实例 得到session的时候要用到
prop.put("mail.transport.protocol", "smtp");//协议
prop.put("mail.smtp.auth", "true");//是否用户登录 否的话就是邮件服务器之间的发送..........................?
//注意:这个session 不是 httpsession 更不是hibernate的session 这个事javamail api中的session 基本邮件会话
Session session = Session.getDefaultInstance(prop);//用Session类的一个静态方法得到session的实例
session.setDebug(true);//在控制台打印出和邮件服务器的交互过程
Transport transport = session.getTransport();//得到一个Transport的实例 这个类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息
transport.connect("smtp.sina.com","caohua_1012", "9831012");
Message message = createMessage(session);//得到有内容的Message实例 内容的填充时调用createMessage方法
//InternetAddress是一个继承了Address接口的类
InternetAddress[] ia = new InternetAddress[]{new InternetAddress("caohua_1012@sina.com")};//得到一个地址数组
transport.sendMessage(message,ia);//发送邮件的方法需要两个参数 一个是内容类(Message)的实例 一个是地址数组(会发送给多个人所以是数组)
transport.close();//关闭通信
}
/**
* 填充Message类的内容
* @param session
* @return Message
* @throws Exception
*/
private static Message createMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);//得到一个message对象
message.setFrom(new InternetAddress("caohua_1012@sina.com"));//设置发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("caohua_1012@sina.com"));//设置收件人
message.setSubject("javamail测试邮件");//邮件主题
/** 代表正文的bodypart
* <img src=cid:logo.gif>的调用方法是 cid:logo.gif在图片的bodypart定义类型时定义 在邮件正文的bodypart中需要这样调用 如果不调用则按照附件来处理
**/
MimeBodyPart text = new MimeBodyPart();//得到一个正文bodypart的实例
text.setContent("<html> 我是一个码农!!!<img src=cid:logo.gif>码农祖师爷的神像</html>", "text/html;charset=gb2312");//set内容 及返回的内容的contenttype
/** 代表正文所引用的图片的bodypart **/
MimeBodyPart image = new MimeBodyPart();//得到一个图片的bodypart实例
DataHandler dh1 = new DataHandler(new FileDataSource("E:\\aa.jpg"));//一种数据类型的处理类 初始化需要传入一个数据源
image.setDataHandler(dh1);//放入多媒体数据
image.setContentID("logo.gif");//定义正文内容引用id
/** 代表附件的bodypart **/
MimeBodyPart attach = new MimeBodyPart();//得到一个附件的bodypart类
DataHandler dh2 = new DataHandler(new FileDataSource("E:\\10635324.jpg"));//一种数据类型的处理类 初始化需要传入一个数据源
attach.setDataHandler(dh2);//放入多媒体数据
attach.setFileName(MimeUtility.encodeText(dh2.getName())); //要对中文文件名进行编码!!!
MimeMultipart text_image = new MimeMultipart();//数据容器 正文中有文本 + 图片需要先放到这个类中 然后再把这个类放入到 一个新的bodypart类中
text_image.addBodyPart(text);//将文本放入数据容器中
text_image.addBodyPart(image);//将图片放入数据容器中
text_image.setSubType("related");//设置数据容器类型 mixed(没关系) related(调用关系) alternative
MimeBodyPart text_image_body = new MimeBodyPart();//得到一个新的bodypart
text_image_body.setContent(text_image);//把数据容器放入新的bodypart中
/** 封装了所有邮件数据的容器 **/
MimeMultipart multipart = new MimeMultipart();//将附件 正文+图片的数据容器 合并放入这个数据容器
multipart.addBodyPart(text_image_body);//放入正文+图片的数据容器
multipart.addBodyPart(attach);//放入附件
multipart.setSubType("mixed");//设置混合类型
message.setContent(multipart);//将数据容器放入message类
message.saveChanges();//保存修改
return message;
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chpublish1012/archive/2009/07/04/4322304.aspx
分享到:
相关推荐
javaMail发送邮件 发送成功 收不到邮件 或收到邮件无主题无收件人乱码 查看debug 邮件处理过程发现邮件头没有编译, 内容是base64编码,所以邮箱收不到或者收到的是base64编码后的一堆乱码,
如何用javamail定时发送邮件
javamail邮件发送工具类 封装好的 可直接使用
Struts2框架,javamail发送邮件,可以直接用main()调用,也可通过tomcat,在IE上运行,比较简单易懂。
JavaMail邮件发送(带附件)
javamail实现发送邮件的小例子,简单易会,好用记得给好评哦!
javamail发送邮件实例 javamail 发送邮件 文本编辑器 kindeditor
简单的使用javamail发送邮件例子,基本满足普通邮件发送的需求;程序运行后可以直接执行test.java文件进行测试。
javamail批量发送邮件
NULL 博文链接:https://essay.iteye.com/blog/342178
如何用javamail定时发送邮件.doc
javamail发送邮件;支持群发、单次发送;文本发送,html发送
javamail邮件发送程序 自己建工程测试时,会与javaEE中的包文件冲突。 可以先去年javaEE进行测试
javamail 邮件发送支持带有图片的html格式和普通文本格式
java mail javamail 邮件发送,程序利用javamail技术发送邮件
此源码是使用javamail发送邮件,可以实现静默发送邮件,可以发送附件资源等。有相应的使用说明,快捷好用
纯java发送简单邮件的功能,支持嘱性文件的配置,可配多人接收,多个附件,简单。。。
代码下载后,直接修改自己邮箱密码,接收者邮箱就可发送成功。其实Java应用程序发送 E-mail 非常简单。
压缩包包含了达成javaMail发送的前置jar包(activation.jar和mail.jar)同时包含了对应的发送邮件的Deom,直接复制就可跑