最近项目中用到发送邮件,实现后把自己的心得写出来,希望能帮到同僚们
Spring 的 mail 实现在对java.mail 的封装 实现起来要更加简洁,脱离了使用java.mail 的繁琐操作
需要的包有 jar,mail.jar,commons-logging.jar,activation.jar
Spring mail 根据功能的需求划分成2部分
1 发送简单的文本邮件
org.springframework.mail
--mail --MailMessage 基础邮件信息(标题,接受地址,发送地址,文本内容,发送时间)
--MailSender 父接口JavaMailSender 实现类 JavaMailSenderImpl 发送简单的邮件信息
例子:
public void sendmail(){
//创建邮件发送类 JavaMailSender
//用于发送基本的文本邮件信息(不能包括附件,及图片)
JavaMailSender sender = new JavaMailSenderImpl();
//设置邮件服务主机
((JavaMailSenderImpl)sender).setHost("smtp.sohu.com");
//发送者邮箱的用户名
((JavaMailSenderImpl)sender).setUsername("userName");
//发送者邮箱的密码
((JavaMailSenderImpl)sender).setPassword("password");
//配置文件,用于实例化java.mail.session
Properties pro = System.getProperties();
//登录SMTP服务器,需要获得授权,网易163邮箱新近注册的邮箱均不能授权。
//测试 sohu 的邮箱可以获得授权
pro.put("mail.smtp.auth", "true");
pro.put("mail.smtp.socketFactory.port", "25");
pro.put("mail.smtp.socketFactory.fallback", "false");
//通过文件获取信息
((JavaMailSenderImpl)sender).setJavaMailProperties(pro);
//创建基本邮件信息
MailMessage mailMessage = new SimpleMailMessage();
//发送者地址,必须填写正确的邮件格式,否者会发送失败
mailMessage.setFrom("******@sohu.com");
//邮件主题
mailMessage.setSubject("测试邮件");
//邮件内容,简单的邮件信息只能添加文本信息
mailMessage.setText("测试");
//邮件接收者的邮箱地址
mailMessage.setTo("******@qq.com");
//发送邮件,参数可以是数组
//sender.send(SimpleMailMessage[])
sender.send((SimpleMailMessage)mailMessage);
}
2 发送多元化的邮件,可以包括附件,图片等
--mail.javamail
--JavaMailSender 扩充父接口 MailSender 支持发送mime电子邮件(html,附件,等)
--JavaMailSenderImpl javaMailSender,MailSender 的实现类
--MimeMailMessage javax.mail.internet 多用途邮件
--MimeMessageHelper 辅助类,将参数封装至MimeMessage 里。
--to 添加接受方的邮件地址,该方法封装了 javax.mail.Message.setRecipient() 方法
--from 添加发送发地址 封装了 javax.mail.internet.MimeMessage.setFrom(Address arg0)方法
--setSubject 邮件标题 封装了 javax.mail.internet.MimeMessage.setSubject(String arg0)
--setText 邮件内容 封装了void javax.mail.Part.setContent(Object arg0, String arg1) 和
和void javax.mail.internet.MimePart.setText(String arg0);如果是html 调用前者,
--MimeMessagePreparator 可以回调接口,使用MimeMessage 的功能。
例子:
public void sendMimeMail() throws MessagingException{
//创建邮件发送类 JavaMailSender
//用于发送多元化邮件,包括附件,图片,html 等
JavaMailSender mimeMailSender = new JavaMailSenderImpl();
//设置邮件服务主机
((JavaMailSenderImpl)mimeMailSender).setHost("smtp.sohu.com");
//发送者邮箱的用户名
((JavaMailSenderImpl)mimeMailSender).setUsername("userName");
//发送者邮箱的密码
((JavaMailSenderImpl)mimeMailSender).setPassword("password");
//配置文件,用于实例化java.mail.session
Properties pro = System.getProperties();
//登录SMTP服务器,需要获得授权,网易163邮箱新近注册的邮箱均不能授权。
//测试 sohu 的邮箱可以获得授权
pro.put("mail.smtp.auth", "true");
pro.put("mail.smtp.socketFactory.port", "25");
pro.put("mail.smtp.socketFactory.fallback", "false");
((JavaMailSenderImpl)mimeMailSender).setJavaMailProperties(pro);
//创建多元化邮件
MimeMessage mimeMessage = ((JavaMailSenderImpl)mimeMailSender).createMimeMessage();
//创建 mimeMessage 帮助类,用于封装信息至 mimeMessage
MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true, "GBK");
//基本信息
//发送者地址,必须填写正确的邮件格式,否者会发送失败
helper.setFrom("*******@sohu.com");
//邮件主题
helper.setSubject("测试邮件");
//邮件内容,简单的邮件信息只能添加文本信息
helper.setText("测试");
//邮件接收者的邮箱地址
helper.setTo("******@qq.com");
//多元化信息
//添加HTML 信息
File myPicture = new File("C:\\Documents and Settings\\Administrator\\桌面\\kz2.jpg");
//如果是html代码,boolean 的参数用该为true
helper.setText("<html><head><meta http-equiv="+"Content-Type"+" content="+"text/html; charset=gb2312"+"></head><body><h1>新书快递通知</h1>你的新书快递申请已推送新书,请到<a href=''>空间"
+ "</a>中查看<br><img src='cid:myPicture'></body></html>", true);
//添加图片至HTML 代码中
helper.addInline("myPicture", myPicture);
//添加附件
File file = new File("C:\\Documents and Settings\\Administrator\\桌面\\validate.jar");
helper.addAttachment("picture", myPicture);
helper.addAttachment("picture", file);
((JavaMailSender)mimeMailSender).send(mimeMessage);
System.out.println("发送成功");
}