通过javaMail发送邮件,可设置多个收件人,多个附件

通过javaMail发送邮件,可设置多个收件人,发送多个附件:

附件名称为中文时无乱码现象

详见代码:

SendMailTest .java:

Java代码   收藏代码
  1. package com.test;  
  2.   
  3. import java.util.Date;  
  4. import java.util.Properties;  
  5.   
  6. import javax.activation.DataHandler;  
  7. import javax.activation.FileDataSource;  
  8. import javax.mail.Authenticator;  
  9. import javax.mail.Multipart;  
  10. import javax.mail.internet.InternetAddress;  
  11. import javax.mail.internet.MimeBodyPart;  
  12. import javax.mail.internet.MimeMultipart;  
  13. import javax.mail.internet.MimeUtility;  
  14.   
  15.   
  16. /** 
  17.  * 利用java.mail的邮件发送程序 
  18.  */  
  19.   
  20. public class SendMailTest {  
  21.       
  22.       
  23.     public static void main(String[] args) {  
  24.         String title = "邮件主题";// 所发送邮件的标题  
  25.         String from = "[email protected]";// 从那里发送  
  26.         String sendTo[] = { "[email protected]""[email protected]" };// 发送到那里  
  27.         // 邮件的文本内容,可以包含html标记则显示为html页面  
  28.         String content = "mail test!!!!!!<br><a href=#>aaa</a>";  
  29.         // 所包含的附件,及附件的重新命名  
  30.         String fileNames[] = { "D:\\test.txt,test.txt","D:\\test2.txt,哈哈.txt" };  
  31.         try {  
  32.             // MailSender mailsender = new MailSender();  
  33.             sendmail(title, from, sendTo, content, fileNames,  
  34.                     "text/html;charset=gb2312");  
  35.         } catch (Exception ex) {  
  36.             ex.printStackTrace();  
  37.         }  
  38.     }  
  39.   
  40.     public static void sendmail(String subject, String from, String[] to,  
  41.             String text, String[] filenames, String mimeType) throws Exception {  
  42.         // ResourceBundle mailProps = ResourceBundle.getBundle("mail");  
  43.         // 可以从配置文件读取相应的参数  
  44.         Properties props = new Properties();  
  45.   
  46.         String smtp = "smtp.126.com"// 设置发送邮件所用到的smtp  
  47.         String servername = "[email protected]";  
  48.         String serverpaswd = "hello123";  
  49.   
  50.         javax.mail.Session mailSession; // 邮件会话对象  
  51.         javax.mail.internet.MimeMessage mimeMsg; // MIME邮件对象  
  52.   
  53.         props = java.lang.System.getProperties(); // 获得系统属性对象  
  54.         props.put("mail.smtp.host", smtp); // 设置SMTP主机  
  55.         props.put("mail.smtp.auth""true"); // 是否到服务器用户名和密码验证  
  56.         // 到服务器验证发送的用户名和密码是否正确  
  57.         Email_Autherticatorbean myEmailAuther = new Email_Autherticatorbean(  
  58.                 servername, serverpaswd);  
  59.         // 设置邮件会话  
  60.         mailSession = javax.mail.Session.getInstance(props,  
  61.                 (Authenticator) myEmailAuther);  
  62.           
  63.         //设置debug打印信息  
  64.         mailSession.setDebug(true);  
  65.           
  66.         // 设置传输协议  
  67.         javax.mail.Transport transport = mailSession.getTransport("smtp");  
  68.         // 设置from、to等信息  
  69.         mimeMsg = new javax.mail.internet.MimeMessage(mailSession);  
  70.         if (!from.isEmpty()) {  
  71.   
  72.             InternetAddress sentFrom = new InternetAddress(from);  
  73.             mimeMsg.setFrom(sentFrom); // 设置发送人地址  
  74.         }  
  75.   
  76.         InternetAddress[] sendTo = new InternetAddress[to.length];  
  77.         for (int i = 0; i < to.length; i++) {  
  78.             System.out.println("发送到:" + to[i]);  
  79.             sendTo[i] = new InternetAddress(to[i]);  
  80.         }  
  81.   
  82.         mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.TO,  
  83.                 sendTo);  
  84.         mimeMsg.setSubject(subject, "gb2312");  
  85.   
  86.         MimeBodyPart messageBodyPart1 = new MimeBodyPart();  
  87.         // messageBodyPart.setText(UnicodeToChinese(text));  
  88.         messageBodyPart1.setContent(text, mimeType);  
  89.   
  90.         Multipart multipart = new MimeMultipart();// 附件传输格式  
  91.         multipart.addBodyPart(messageBodyPart1);  
  92.   
  93.         for (int i = 0; i < filenames.length; i++) {  
  94.             MimeBodyPart messageBodyPart2 = new MimeBodyPart();  
  95.             // 选择出每一个附件名  
  96.             String filename = filenames[i].split(",")[0];  
  97.             System.out.println("附件名:" + filename);  
  98.             String displayname = filenames[i].split(",")[1];  
  99.             // 得到数据源  
  100.             FileDataSource fds = new FileDataSource(filename);  
  101.             // 得到附件本身并至入BodyPart  
  102.             messageBodyPart2.setDataHandler(new DataHandler(fds));  
  103.             // 得到文件名同样至入BodyPart  
  104.             // messageBodyPart2.setFileName(displayname);  
  105.             // messageBodyPart2.setFileName(fds.getName());  
  106.             messageBodyPart2.setFileName(MimeUtility.encodeText(displayname));  
  107.             multipart.addBodyPart(messageBodyPart2);  
  108.         }  
  109.         mimeMsg.setContent(multipart);  
  110.         // 设置信件头的发送日期  
  111.         mimeMsg.setSentDate(new Date());  
  112.         mimeMsg.saveChanges();  
  113.         // 发送邮件  
  114.         transport.send(mimeMsg);  
  115.         transport.close();  
  116.     }  
  117.   
  118. }  

用户验证代码:

Email_Autherticatorbean.java:

Java代码   收藏代码
  1. package com.test;  
  2.   
  3. import javax.mail.Authenticator;  
  4. import javax.mail.PasswordAuthentication;  
  5.   
  6. public class Email_Autherticatorbean extends Authenticator {  
  7.     private String m_username = null;  
  8.     private String m_userpass = null;  
  9.   
  10.     public void setUsername(String username) {  
  11.         m_username = username;  
  12.     }  
  13.   
  14.     public void setUserpass(String userpass) {  
  15.         m_userpass = userpass;  
  16.     }  
  17.   
  18.     public Email_Autherticatorbean(String username, String userpass) {  
  19.         super();  
  20.         setUsername(username);  
  21.         setUserpass(userpass);  
  22.   
  23.     }  
  24.   
  25.     public PasswordAuthentication getPasswordAuthentication() {  
  26.   
  27.         return new PasswordAuthentication(m_username, m_userpass);  
  28.     }  
  29. }  

把这两个类放在web project中运行SendMailTest.java 即可测试使用。

具体方法调用方式见SendMailTest.java  main方法。

测试邮箱:

[email protected]  pwd:hello123    smtp:smtp.126.com
[email protected]  pwd:hello123
[email protected]    pwd:123456789   未开通smtp服务

猜你喜欢

转载自fengbin2005.iteye.com/blog/2364610