文档章节

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

涂宗勋
 涂宗勋
发布于 2016/05/12 09:17
字数 709
阅读 19
收藏 1

下载和上传附件、发送短信和发送邮件,都算是程序中很常用的功能,之前记录了文件的上传和下载还有发送短信,由于最近比较忙,邮件发送的功能就没有时间去弄,好在昨晚终于走通代码成功以163邮箱发送邮件到qq邮箱,以下是相关代码,具体解释可以参考代码中注释:

[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.mail.Address;  
  10. import javax.mail.Authenticator;  
  11. import javax.mail.BodyPart;  
  12. import javax.mail.Message;  
  13. import javax.mail.PasswordAuthentication;  
  14. import javax.mail.Session;  
  15. import javax.mail.Transport;  
  16. import javax.mail.internet.InternetAddress;  
  17. import javax.mail.internet.MimeBodyPart;  
  18. import javax.mail.internet.MimeMessage;  
  19. import javax.mail.internet.MimeMultipart;  
  20. import com.sun.mail.util.MailSSLSocketFactory;  
  21.   
  22. ///**  
  23. // *   
  24. // * @author zengyuan  
  25. // * @date  Jan 15, 2016 - 9:55:48 AM  
  26. // * @Description 邮件发送测试类  
  27. // */  
  28. public class sendMailTest {  
  29.     public static void main(String[] args) throws Exception {  
  30.         // 配置信息  
  31.         Properties pro = new Properties();  
  32.         pro.put("mail.smtp.host", "smtp.163.com");  
  33.         pro.put("mail.smtp.auth", "true");  
  34.         // SSL加密  
  35.         MailSSLSocketFactory sf = null;  
  36.         sf = new MailSSLSocketFactory();  
  37.         // 设置信任所有的主机  
  38.         sf.setTrustAllHosts(true);  
  39.         pro.put("mail.smtp.ssl.enable", "true");  
  40.         pro.put("mail.smtp.ssl.socketFactory", sf);  
  41.         // 根据邮件的会话属性构造一个发送邮件的Session,这里需要注意的是用户名那里不能加后缀,否则便不是用户名了  
  42.         //还需要注意的是,这里的密码不是正常使用邮箱的登陆密码,而是客户端生成的另一个专门的授权码  
  43.         MailAuthenticator authenticator = new MailAuthenticator("tuzongxun123",  
  44.                 "客户端授权码");  
  45.         Session session = Session.getInstance(pro, authenticator);  
  46.         // 根据Session 构建邮件信息  
  47.         Message message = new MimeMessage(session);  
  48.         // 创建邮件发送者地址  
  49.         Address from = new InternetAddress("tuzongxun123@163.com");  
  50.         // 设置邮件消息的发送者  
  51.         message.setFrom(from);  
  52.         // 验证收件人邮箱地址  
  53.         List<String> toAddressList = new ArrayList<>();  
  54.         toAddressList.add("1160569243@qq.com");  
  55.         StringBuffer buffer = new StringBuffer();  
  56.         if (!toAddressList.isEmpty()) {  
  57.             String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";  
  58.             Pattern p = Pattern.compile(regEx);  
  59.             for (int i = 0; i < toAddressList.size(); i++) {  
  60.                 Matcher match = p.matcher(toAddressList.get(i));  
  61.                 if (match.matches()) {  
  62.                     buffer.append(toAddressList.get(i));  
  63.                     if (i < toAddressList.size() - 1) {  
  64.                         buffer.append(",");  
  65.                     }  
  66.                 }  
  67.             }  
  68.         }  
  69.         String toAddress = buffer.toString();  
  70.         if (!toAddress.isEmpty()) {  
  71.             // 创建邮件的接收者地址  
  72.             Address[] to = InternetAddress.parse(toAddress);  
  73.             // 设置邮件接收人地址  
  74.             message.setRecipients(Message.RecipientType.TO, to);  
  75.             // 邮件主题  
  76.             // message.setSubject("java邮件测试");  
  77.             message.setSubject("为什么错了");  
  78.             // 邮件容器  
  79.             MimeMultipart mimeMultiPart = new MimeMultipart();  
  80.             // 设置HTML  
  81.             BodyPart bodyPart = new MimeBodyPart();  
  82.             // 邮件内容  
  83.             // String htmlText = "java邮件测试111";  
  84.             String htmlText = "为什么错了";  
  85.             bodyPart.setContent(htmlText, "text/html;charset=utf-8");  
  86.             mimeMultiPart.addBodyPart(bodyPart);  
  87.           // 添加附件  
  88.             List<String> fileAddressList = new ArrayList<String>();  
  89.             fileAddressList  
  90.                     .add("C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文档.docx");  
  91.             if (fileAddressList != null) {  
  92.                 BodyPart attchPart = null;  
  93.                 for (int i = 0; i < fileAddressList.size(); i++) {  
  94.                     if (!fileAddressList.get(i).isEmpty()) {  
  95.                         attchPart = new MimeBodyPart();  
  96.                         // 附件数据源  
  97.                         DataSource source = new FileDataSource(  
  98.                                 fileAddressList.get(i));  
  99.                         // 将附件数据源添加到邮件体  
  100.                         attchPart.setDataHandler(new DataHandler(source));  
  101.                         // 设置附件名称为原文件名  
  102.                         attchPart.setFileName(MimeUtility.encodeText(source  
  103.                                 .getName()));  
  104.                         mimeMultiPart.addBodyPart(attchPart);  
  105.                     }  
  106.                 }  
  107.             }  
  108.             message.setContent(mimeMultiPart);  
  109.             message.setSentDate(new Date());  
  110.             // 保存邮件  
  111.             message.saveChanges();  
  112.             // 发送邮件  
  113.             Transport.send(message);  
  114.         }  
  115.     }  
  116. }  
  117.   
  118. class MailAuthenticator extends Authenticator {  
  119.   
  120.     /** 
  121.      * 用户名 
  122.      */  
  123.     private String username;  
  124.     /** 
  125.      * 密码 
  126.      */  
  127.     private String password;  
  128.   
  129.     /** 
  130.      * 创建一个新的实例 MailAuthenticator. 
  131.      *  
  132.      * @param username 
  133.      * @param password 
  134.      */  
  135.     public MailAuthenticator(String username, String password) {  
  136.         this.username = username;  
  137.         this.password = password;  
  138.     }  
  139.   
  140.     public String getPassword() {  
  141.         return password;  
  142.     }  
  143.   
  144.     @Override  
  145.     protected PasswordAuthentication getPasswordAuthentication() {  
  146.         return new PasswordAuthentication(username, password);  
  147.     }  
  148.   
  149.     public String getUsername() {  
  150.         return username;  
  151.     }  
  152.   
  153.     public void setPassword(String password) {  
  154.         this.password = password;  
  155.     }  
  156.   
  157.     public void setUsername(String username) {  
  158.         this.username = username;  
  159.     }  
  160.   
  161. }  

© 著作权归作者所有

共有 人打赏支持
涂宗勋
粉丝 12
博文 137
码字总数 121453
作品 0
深圳
程序员
commons-email发邮件

记得曾经学习用javamail发邮件,学了2天,大概搞明白了利用javamail发邮件的方法和注意事项。 这周末在网上闲逛时,发现了另外一个发邮件的好东东。 commons-email-1.1.jar: 这是Apache组织下...

enzozhong
2013/02/14
0
0
鲜为人知的Java8特性:泛化目标类型推断

本文由 ImportNew - 彭秦进 翻译自 javacodegeeks。如需转载本文,请先参见文章末尾处的转载要求。 ImportNew注:如果你也对Java技术翻译分享感兴趣,欢迎加入我们的 Java开发 小组。参与方式...

Big_BoBo
2014/01/02
0
0
[手记]使用java Mail发送邮件.

因为项目中要用到这个功能,写出来了.所以和大家分享一下.首先,完成javamail发送电子邮件,需要到oracle网站上下载javamail的jar包:地址为:http://www.oracle.com/technetwork/java/javamail...

被风遗忘
2012/05/06
0
0
Jenkins 教程(一)实现自动化打包及邮件通知

个人不喜欢装腔作势一堆专业术语放上去,让大多数人看不懂来提升逼格(所谓的专家),所以我简单的介绍jenkins是干啥的。本文使用jenkins,就是让它把git仓库里的东西取出来,然后在jenkins容器...

FantJ
05/26
0
0
用 JNI 进行 Java 编程(1)

本教程是关于什么的? Java 本机接口(Java Native Interface (JNI))是一个本机编程接口,它是 Java 软件开发工具箱(Java Software Development Kit (SDK))的一部分。JNI 允许 Java 代码使...

Jerikc
2012/10/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

jquery创建类似于java的map

var map = {}; // Map map = new HashMap(); map[key] = value; // map.put(key, value); var value = map[key]; // Object value = map.get(key); var has = key in map; // boolean has = ......

SuperDabai
38分钟前
0
0
java大数据转换16进制转10进制

public static void main(String[] args) {String hex = "0xdbf3accc683297cf0000";BigInteger amount = new BigInteger(hex.substring(2), 16);System.out.println(amount);......

任梁荣
昨天
2
0
OSChina 周六乱弹 —— 目测我们程序员丁克的几率不大

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @真Skr小机灵鬼儿:8.13分享Jocelyn Pook/Russian Red的单曲《Loving Strangers》 《Loving Strangers》- Jocelyn Pook/Russian Red 手机党少...

小小编辑
昨天
9
3
TypeScript基础入门 - 函数 - 剩余参数

转载 TypeScript基础入门 - 函数 - 剩余参数 项目实践仓库 https://github.com/durban89/typescript_demo.gittag: 1.2.1 为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能...

durban
昨天
1
0
OpenCV边缘检测算子原理总结及实现

1. 拉普拉斯算子 原理:是一种基于图像导数运算的高通线性滤波器。它通过二阶导数来度量图像函数的曲率。 拉普拉斯算子是最简单的各向同性微分算子,它具有旋转不变性。一个二维图像函数的拉...

漫步当下
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部