来看看通过类中的静态方法实现
package com.sinwao.javamail;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.event.MessageChangedEvent;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
public class Demo2 {
/**
* 调用类本身的静态方法
* 使用Authenticator类验证用户信息
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
Properties props = new Properties();
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.transport.protocol", "smtp");
props.setProperty("mail.host", "smtp.sohu.com");
Session session = Session.getDefaultInstance(props,
new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("artcool@sohu.com","123456");
};
}
);
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress("xxx@yahoo.com"));
msg.setSubject("我的主题");
msg.setRecipients(RecipientType.TO,
InternetAddress.parse("111@sina.com;110@163.com"));
msg.setContent("<span style='color:blue'>邮件内容</span>", "text/html;charset=gbk");
Transport.send(msg);
}
}
把用户名和密码封装到一个对象里面。采用设计模式中的策略模式去实现发送邮件的效果。
邮件的内容组织结构:
1、RFC822邮件格式
2、MIME协议
3、邮件编码
4、复合邮件结构分析
邮件内容创建程序:
1、简单邮件内容
2、包含内嵌图片的复杂邮件
3、包含内嵌图片和附件的复杂邮件
4、中文名的邮件附件的乱码问题
5、收件人和发件人的地址中附带友好名称
6、让回复地址与发件人地址不同
复杂邮件生成的代码:
package com.sinwao.javamail;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class Demo3 {
public static void main(String[] args) throws Exception {
Properties props = new Properties();
Session session = Session.getDefaultInstance(props);
Message msg = new MimeMessage(session);
msg.setSubject("主题内容");
MimeMultipart msgMultipart = new MimeMultipart("mixed");
msg.setContent(msgMultipart);
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart attach1 = new MimeBodyPart();
MimeBodyPart attach2 = new MimeBodyPart();
msgMultipart.addBodyPart(content);
msgMultipart.addBodyPart(attach1);
msgMultipart.addBodyPart(attach2);
//处理附件一
DataSource ds = new FileDataSource("添加文件");
DataHandler dataHandler = new DataHandler(ds);
attach1.setDataHandler(dataHandler);
attach1.setFileName("附件的文件名");
//处理附件二
DataSource ds2 = new FileDataSource("添加文件");
DataHandler dataHandler2 = new DataHandler(ds2);
attach2.setDataHandler(dataHandler2);
attach2.setFileName("附件的文件名2");
//处理邮件内容
MimeMultipart bodyMultipart = new MimeMultipart("related");
content.setContent(bodyMultipart);
MimeBodyPart htmlpart = new MimeBodyPart();
MimeBodyPart gifpart = new MimeBodyPart();
bodyMultipart.addBodyPart(htmlpart);
bodyMultipart.addBodyPart(gifpart);
//处理图片内容
DataSource gfds = new FileDataSource("添加文件");
DataHandler gfdh = new DataHandler(gfds);
gifpart.setDataHandler(gfdh);
gifpart.setHeader("Content-Location", "http://www.baidu.com/logo.png");
//处理HTML内容
htmlpart.setContent("html文本内容","text/html;charset=gbk");
//保存邮件内容
msg.saveChanges();
//讲邮件写到一个文件中
OutputStream is = new FileOutputStream("");
msg.writeTo(is);
is.close();
}
}
其实要注意一个细节
使用MimeUtility工具处理附件的中文邮件名
MimeUtility.encodeText("附件的文件名")
接下来看看进一步完善的代码
package com.sinwao.javamail;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
public class Demo3 {
public static void main(String[] args) throws Exception{
Properties props = new Properties();
Session session = Session.getDefaultInstance(props);
Message msg = new MimeMessage(session);
//设置发件人地址,并且显示友好名称
msg.setFrom(new InternetAddress("\""+MimeUtility.encodeText("吴艺斌")+"xxx@xxx.com"));
msg.setSubject("主题内容");
//设置回复邮件的收件人地址
msg.setReplyTo(new Address[]{new InternetAddress("zhangsan@163.com")});
//设置多个收件人
msg.setRecipients(RecipientType.TO, InternetAddress.parse(MimeUtility.encodeText("张三") + "<zs@test.com>," + MimeUtility.encodeText("李四")+ " <ls@test.com>"));
MimeMultipart msgMultipart = new MimeMultipart("mixed");
msg.setContent(msgMultipart);
MimeBodyPart content = new MimeBodyPart();
MimeBodyPart attach1 = new MimeBodyPart();
MimeBodyPart attach2 = new MimeBodyPart();
msgMultipart.addBodyPart(content);
msgMultipart.addBodyPart(attach1);
msgMultipart.addBodyPart(attach2);
//处理附件一
DataSource ds = new FileDataSource("添加文件");
DataHandler dataHandler = new DataHandler(ds);
attach1.setDataHandler(dataHandler);
//附件的中文邮件名处理
attach1.setFileName(
MimeUtility.encodeText("附件的文件名")
);
//处理附件二
DataSource ds2 = new FileDataSource("添加文件");
DataHandler dataHandler2 = new DataHandler(ds2);
attach2.setDataHandler(dataHandler2);
attach2.setFileName("附件的文件名2");
//处理邮件内容
MimeMultipart bodyMultipart = new MimeMultipart("related");
content.setContent(bodyMultipart);
MimeBodyPart htmlpart = new MimeBodyPart();
MimeBodyPart gifpart = new MimeBodyPart();
bodyMultipart.addBodyPart(htmlpart);
bodyMultipart.addBodyPart(gifpart);
//处理图片内容
DataSource gfds = new FileDataSource("添加文件");
DataHandler gfdh = new DataHandler(gfds);
gifpart.setDataHandler(gfdh);
gifpart.setHeader("Content-Location", "http://www.baidu.com/logo.png");
//处理HTML内容
htmlpart.setContent("html文本内容","text/html;charset=gbk");
//保存邮件内容
msg.saveChanges();
//讲邮件写到一个文件中
OutputStream is = new FileOutputStream("");
msg.writeTo(is);
is.close();
}
}
}