最近项目中用到发送邮件,实现后把自己的心得写出来,希望能帮到同僚们
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("发送成功"); }