JAVA代码发送邮件示例和解释(二)

来源:互联网 发布:oppo网络授权门店 编辑:程序博客网 时间:2024/05/19 20:48

转载自:http://blog.csdn.net/tuzongxun/article/details/51593157

之前有使用过一次在程序中发邮件的功能,也写了一篇相关的笔记,当时使用的是163邮箱,经过测试多个163账号都是可行的。但是最近把账号换成中国移动@chinamobilesz.com这种结尾的时候,却一直连接不上服务器,验证不通过,于是只好重新进行了一些改动,这期间也有参考另一个同事之前的写法,成功实现。

这种实现方式和上一种大同小异,只是经过测试后,这种方式不仅163的邮箱没有问题,中国移动@chinamobilesz.com这种也可以,因此相对前边写的那种应该要更好一些,具体代码如下:
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. package test;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6. import java.util.Properties;  
  7. import java.util.regex.Matcher;  
  8. import java.util.regex.Pattern;  
  9. import javax.activation.DataHandler;  
  10. import javax.activation.DataSource;  
  11. import javax.activation.FileDataSource;  
  12. import javax.mail.Address;  
  13. import javax.mail.BodyPart;  
  14. import javax.mail.Message;  
  15. import javax.mail.Session;  
  16. import javax.mail.Transport;  
  17. import javax.mail.internet.InternetAddress;  
  18. import javax.mail.internet.MimeBodyPart;  
  19. import javax.mail.internet.MimeMessage;  
  20. import javax.mail.internet.MimeMultipart;  
  21. import javax.mail.internet.MimeUtility;  
  22.   
  23. public class SendMailTest1 {  
  24.     public static void main(String[] args) {  
  25.         SendMailTest1 send = new SendMailTest1();  
  26.         send.sendEmail();  
  27.     }  
  28.   
  29.     /** 
  30.      *  
  31.      * @Title: sendTextMail 
  32.      * @Description: TODO 
  33.      * @param mailInfo 
  34.      * @return 
  35.      */  
  36.     // MailModel mailInfo  
  37.     public boolean sendEmail() {  
  38.         // 从配置文件中读取配置信息  
  39.         Properties pro = new Properties();  
  40.         pro.put("mail.smtp.host""mail.chinamobilesz.com");  
  41.         pro.put("mail.smtp.auth""true");  
  42.         // Properties pro = mailConfig.getProperties();  
  43.         // 根据邮件的回话属性构造一个发送邮件的Session  
  44.         MailAuthenticator authenticator = new MailAuthenticator("账号",  
  45.                 "密码");  
  46.         Session session = Session.getInstance(pro, authenticator);  
  47.         // 监控邮件命令  
  48.         try {  
  49.             // 根据Session 构建邮件信息  
  50.             Message message = new MimeMessage(session);  
  51.             // 创建邮件发送者地址  
  52.             Address from = new InternetAddress("xtyw");  
  53.             // 设置邮件消息的发送者  
  54.             message.setFrom(from);  
  55.             // 验证邮箱地址  
  56.             List<String> auth = new ArrayList<String>();  
  57.             auth.add("1160569243@qq.com");  
  58.             String toAddress = validateEmail(auth);  
  59.             if (!toAddress.isEmpty()) {  
  60.                 // 创建邮件的接收者地址  
  61.                 Address[] to = InternetAddress.parse(toAddress);  
  62.                 // 设置邮件接收人地址  
  63.                 message.setRecipients(Message.RecipientType.TO, to);  
  64.                 message.setSubject("12345");  
  65.                 // 邮件容器  
  66.                 MimeMultipart mimeMultiPart = new MimeMultipart();  
  67.                 // 设置HTML  
  68.                 BodyPart bodyPart = new MimeBodyPart();  
  69.                 String htmlText = "123456";  
  70.                 bodyPart.setContent(htmlText, "text/html;charset=utf-8");  
  71.                 mimeMultiPart.addBodyPart(bodyPart);  
  72.                 // 添加附件  
  73.                 List<String> fileList = new ArrayList<String>();  
  74.                 fileList.add("C:\\Users\\tuzongxun123\\Desktop\\自主服务API.docx");  
  75.   
  76.                 if (fileList != null) {  
  77.                     BodyPart attchPart = null;  
  78.                     for (int i = 0; i < fileList.size(); i++) {  
  79.                         if (!fileList.get(i).isEmpty()) {  
  80.                             attchPart = new MimeBodyPart();  
  81.                             // 附件数据源  
  82.                             DataSource source = new FileDataSource(  
  83.                                     fileList.get(i));  
  84.                             // 将附件数据源添加到邮件体  
  85.                             attchPart.setDataHandler(new DataHandler(source));  
  86.                             // 设置附件名称为原文件名  
  87.                             attchPart.setFileName(MimeUtility.encodeText(source  
  88.                                     .getName()));  
  89.                             mimeMultiPart.addBodyPart(attchPart);  
  90.                         }  
  91.                     }  
  92.                 }  
  93.                 message.setContent(mimeMultiPart);  
  94.                 message.setSentDate(new Date());  
  95.                 // 保存邮件  
  96.                 message.saveChanges();  
  97.                 // 发送邮件  
  98.                 Transport.send(message);  
  99.                 return true;  
  100.             }  
  101.         } catch (Exception e) {  
  102.             e.printStackTrace();  
  103.             System.out.println("邮件发送失败");  
  104.         }  
  105.         return false;  
  106.     }  
  107.   
  108.     /** 
  109.      * @title validateEmail 
  110.      * @Description 验证邮箱格式 
  111.      * @param emailList 
  112.      * @return string 
  113.      */  
  114.     public String validateEmail(List<String> emailList) {  
  115.         StringBuffer buffer = new StringBuffer();  
  116.         if (!emailList.isEmpty()) {  
  117.             String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";  
  118.             Pattern p = Pattern.compile(regEx);  
  119.             for (int i = 0; i < emailList.size(); i++) {  
  120.                 Matcher match = p.matcher(emailList.get(i));  
  121.                 if (match.matches()) {  
  122.                     buffer.append(emailList.get(i));  
  123.                     if (i < emailList.size() - 1) {  
  124.                         buffer.append(",");  
  125.                     }  
  126.                 }  
  127.             }  
  128.         }  
  129.         return buffer.toString();  
  130.     }  
  131. }  

0 0
原创粉丝点击