JavaMail 发送Email(含附件)
2015-09-07 14:43
399 查看
JavaMail 发送邮件有固定的步骤,按照固定的步骤设置好送信所需要的信息之后,就可以送信了。本文主要讨论使用JavaMail发送含有多个附件的Email,对于Email的正文内容,不是本文的重点。以后会讨论使用JavaMail+Velocity模版来发送指定形式的Email。
首先需要一个MailInfo来存放送信所需要的信息。这里省略了Setter和Getter方法。
密码校验类
送信的封装和测试
首先需要一个MailInfo来存放送信所需要的信息。这里省略了Setter和Getter方法。
public class MailInfo { //邮件服务器Ip private String mailServerHost; //邮件服务器端口号 private String mailServerPort = "25"; //邮件来源地址(发件人邮箱地址) private String fromAddress; // 邮件接收者的地址(收件人邮箱地址) private String toAddress; // 登陆邮件发送服务器的用户名和密码 private String userName; private String password; // 是否需要身份验证 private boolean validate = false; // 邮件主题 private String subject; // 邮件的文本内容 private String content; //附件 private List<String> attachFileNames; //Setter Getter 方法省略了 }
密码校验类
public class MyAuthenticator extends Authenticator{ private String userName; private String password; public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public MyAuthenticator(){ } public MyAuthenticator(String userName,String password){ this.userName = userName; this.password = password; } /** * check 密码 */ public PasswordAuthentication getPasswordAuthentication(){ return new PasswordAuthentication(userName,password); } }
送信的封装和测试
public class MailSendWithFiles { /** * * @param mailInfo * @return * 发送含有多个附件的email,multipart中存BodyPart ,BodyPart * 中存放邮件的的正文,和附件等信息。 * multipart 中可以包含多个BodyPart, * 一个BodyPart 中存放一个附件 * 注意至关重要的一步,设置附件的名称, * bodypart.setFileName(file.getName()); * 如果不设置附件名称,可以送信成功,但是邮件中附件的名字和后缀都 * 是让你头痛的。 */ public boolean SendMail(MailInfo mailInfo){ //构建Session需要的信息 Properties p = new Properties(); p.put("mail.smtp.host", mailInfo.getMailServerHost()); p.put("mail.smtp.port", mailInfo.getMailServerPort()); p.put("mail.smtp.auth", "true"); //Auth验证 MyAuthenticator myAuthenticator = new MyAuthenticator(mailInfo.getUserName(),mailInfo.getPassword()); Session session = Session.getDefaultInstance(p, myAuthenticator); try { // 通过session构建Message Message mailMessage = new MimeMessage(session); // 发件人 Address from = new InternetAddress(mailInfo.getFromAddress()); mailMessage.setFrom(from); // 收件人 Address to = new InternetAddress(mailInfo.getToAddress()); mailMessage.setRecipient(Message.RecipientType.TO,to); // 邮件主题 mailMessage.setSubject(mailInfo.getSubject()); // 邮件时间 mailMessage.setSentDate(new Date()); // Multipart multipart = new MimeMultipart(); //邮件内容 BodyPart bodyPart1 = new MimeBodyPart(); bodyPart1.setText(mailInfo.getContent()); multipart.addBodyPart(bodyPart1); //邮件附件 List<String> attachFileNames = mailInfo.getAttachFileNames(); if(attachFileNames!=null&&attachFileNames.size()>0){ for(String s :attachFileNames){ File file = new File(s); BodyPart bodyPart2 = new MimeBodyPart(); DataSource source = new FileDataSource(file); bodyPart2.setDataHandler(new DataHandler(source)); //至关重要的一步,设置邮件中附件的名称,不设置附件的 //名称为*******.bin 这显然不是我们想要的 bodyPart2.setFileName(file.getName()); multipart.addBodyPart(bodyPart2); } } mailMessage.setContent(multipart); // 发送邮件 Transport.send(mailMessage); return true; } catch (MessagingException ex) { ex.printStackTrace(); } return false; } public static void main(String[] args){ MailInfo mailInfo = new MailInfo(); mailInfo.setMailServerHost("smtp.163.com"); mailInfo.setMailServerPort("25"); //mailInfo.setValidate(true); mailInfo.setUserName("k****@163.com"); mailInfo.setPassword("***********"); mailInfo.setFromAddress("kshrimp@163.com"); mailInfo.setToAddress("1******@qq.com"); mailInfo.setSubject("ceshi"); mailInfo.setContent("Hello!ggggg"); //设置附件 List<String> attachFileNames = new ArrayList<String>(); attachFileNames.add("G:\\1.properties"); attachFileNames.add("G:\\2.txt"); attachFileNames.add("G:\\mail.vm"); mailInfo.setAttachFileNames(attachFileNames); MailSendWithFiles m = new MailSendWithFiles(); m.SendMail(mailInfo); } }
在测试的过程中,曾经忽略了设置附件的名称,结果出现了问题,在附件中附件总是显示为****.bin 的文件,但是下载附件修改后缀之后仍然可以使用。后来发现是没有设置附件名的缘故。
相关文章推荐
- ElectronMail:ProtonMail 和 Tutanota 的桌面客户端
- 附件名前加网站名
- 中文附件无法下载的问题分析
- C#简单发送email的方法
- 网页上隐藏Email地址的方法
- 基于JavaMail API收发邮件的方法
- php实现邮件发送并带有附件
- JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
- 基于JavaMail的常用类详细介绍
- Oracle10g通过DBLink访问MySQL示例
- Python发送email的3种方法
- php编写的一个E-mail验证类
- JavaMail实现发送超文本(html)格式邮件的方法
- java中javamail发送带附件的邮件实现方法
- 在Python的Flask框架中验证注册用户的Email的方法
- Python实现发送email的几种常用方法
- PHP正则验证Email的方法
- php email邮箱正则
- Python发送Email方法实例
- python中使用smtplib和email模块发送邮件实例