JavaMail实现收发邮件——(二)发送邮件

简介:

一.导入jar包:

    将mail.jar和activation.jar导入到项目中(eclipse中:点击项目名,鼠标右键-->Build Path-->Configure Build Path-->Libraries-->Add External JARs)

注:以上是针对JavaSE的环境,如果是JavaEE环境则不需要,j2ee.jar中包含了上述两个依赖包,可以直接使用。


二.邮件发送关键代码


(1)新建Properties属性对象

1
2
3
Properties properties =  new  Properties();
properties.put( "mail.smtp.host" , smtpServer);
properties.put( "mail.smtp.auth" "true" );


(2)获取Session会话:

1
2
Session session = Session.getInstance(properties);
//session.setDebug(true);


(3)创建Message消息对象以及相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
MimeMessage message =  new  MimeMessage(session);
 
try  {
     //发件人
     Address address =  new  InternetAddress(from);
     message.setFrom(address);
 
     //收件人
     for (String toAd : to){
     Address toAddress =  new  InternetAddress(toAd);
     message.setRecipient(MimeMessage.RecipientType.TO, toAddress);   //设置收件人,并设置其接收类型为TO
     /**
      * TO:代表有健的主要接收者。
      * CC:代表有健的抄送接收者。
      * BCC:代表邮件的暗送接收者。
      * */
     }
 
     //主题
     message.setSubject(changeEncode(subject));
 
     //时间
     message.setSentDate( new  Date());
 
     Multipart multipart =  new  MimeMultipart();
     
     //添加文本
     BodyPart text =  new  MimeBodyPart();
     text.setText(content);
     multipart.addBodyPart(text);
     
     //添加附件
     for (String fileName : attachmentNames){
         BodyPart adjunct =  new  MimeBodyPart();
     FileDataSource fileDataSource =  new  FileDataSource(fileName);
     adjunct.setDataHandler( new  DataHandler(fileDataSource));
     adjunct.setFileName(changeEncode(fileDataSource.getName()));
     multipart.addBodyPart(adjunct);
     }
     
     //清空收件人集合,附件集合
     to.clear();
     attachmentNames.clear();
 
     message.setContent(multipart);     
     message.saveChanges();     
     catch  (Exception e) {
     e.printStackTrace();
     return  false ;         
     }

注:1.这里的收件人to是一个String集合,以实现群发目的

    2.里面有返回值是因为我把发送邮件的代码放在了public boolean sendMail(){}中,通过返回值判断是否已发送成功。下面我会把完整代码放在附件中供大家参考


(4)用Session会话得到Transport对象以及发送邮件

1
2
3
4
5
6
7
8
9
10
11
try  {
     Transport transport = session.getTransport( "smtp" );
     //用SMTP服务器地址以及用户名和密码连接SMTP服务器
     transport.connect(smtpServer,username,password);
     //发送邮件
     transport.sendMessage(message, message.getAllRecipients());
     transport.close();         
catch  (Exception e) {    
     e.printStackTrace();
     return  false ;
     }


三.测试代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public  static  void  main(String[] args) {
     SendMail sendMail =  new  SendMail();
     sendMail.setSmtpServer( "smtp.qq.com" );
     sendMail.setUsername( "youname@qq.com" );
     sendMail.setPassword( "youpassword" );
     sendMail.setFrom( "123456@qq.com" );
     sendMail.addTo( "654321@qq.com" );
//  sendMail.addTo("123456789@qq.com");
     sendMail.setSubject( "邮件标题测试" );
     sendMail.setContent( "Hi,JavaMail.\n你好" );
//  sendMail.addAttachmentNames("C:\\Users\\Administrator\\Desktop\\JavaMail
使用参考.txt");
     sendMail.addAttachmentNames( "C:/Users/Administrator/Desktop/测试.txt" );
//  sendMail.addAttachmentNames("C:/Users/Administrator/Desktop/加密与解
密.pdf");
     if (sendMail.sendMail()){
     System.out.println( "邮件发送成功" );
     }
}




本文转自 pangfc 51CTO博客,原文链接:http://blog.51cto.com/983836259/1662943,如需转载请自行联系原作者
相关文章
|
9月前
|
机器学习/深度学习 人工智能 并行计算
RT-DETR改进策略【RT-DETR和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
RT-DETR改进策略【RT-DETR和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
502 1
RT-DETR改进策略【RT-DETR和Mamba】| MLLA:Mamba-Like Linear Attention,融合Mamba设计优势的注意力机制
|
开发框架 前端开发 Android开发
安卓与iOS开发中的跨平台策略
在移动应用开发的战场上,安卓和iOS两大阵营各据一方。随着技术的演进,跨平台开发框架成为开发者的新宠,旨在实现一次编码、多平台部署的梦想。本文将探讨跨平台开发的优势与挑战,并分享实用的开发技巧,帮助开发者在安卓和iOS的世界中游刃有余。
|
中间件 测试技术 持续交付
软件测试中的自动化测试实践指南
【10月更文挑战第4天】 本文探讨了软件测试中自动化测试的重要性,并详细介绍了如何有效实施自动化测试。从选择合适的工具到设计测试用例,再到实际执行与持续集成,我们将一步步引导读者了解自动化测试的全过程。通过具体案例分析,我们展示了自动化测试在提高测试效率、保障软件质量方面的显著优势。无论是初学者还是资深测试工程师,都能从中获得实用的指导和启示。
330 1
|
存储 Java API
JavaMail实现收发邮件
JavaMail 是一套用于发送和接收电子邮件的API,由Sun定义,但不包含在JDK中,属于JavaEE的一部分。它支持SMTP、POP3和IMAP等邮件协议,以及SSL加密传输。JavaMail需要JAF来处理非纯文本邮件内容,如MIME附件。关键对象包括Properties(存储服务器信息)、Session(配置信息集合和初始化环境)、Transport(发送邮件)和Store(接收邮件)。Message用于构建邮件内容,Address处理邮件地址,Authenticator处理认证。JavaMail API允许开发者自定义协议支持,如NNTP和S/MIME。
388 0
|
SQL HIVE
【Hive SQL】字符串操作函数你真的会用吗?
本文介绍了SQL中判断字符串是否包含子串的几种方法。`IN`函数判断元素是否完全等于给定元素组中的某项,而非包含关系。`INSTR`和`LOCATE`函数返回子串在字符串中首次出现的位置,用于检测是否存在子串。`SUBSTR`则用于提取字符串的子串。`LIKE`用于模糊匹配,常与通配符配合使用。注意`IN`并非用于判断子串包含。
1303 3
|
安全 网络协议 网络安全
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
【Python】已解决:pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool (host=’ files. pyth
2045 0
使用LabVIEW打开默认应用程序中的文档(PDF,Word,Excel,Html)
使用LabVIEW的"Open a Document on Disk.vi",存于<LabVIEW>\vi.lib\Platform\browser.llb,可让默认应用打开硬盘文档。此VI仅基础打开功能,高级控制推荐LabVIEW Report Generation Toolkit或ActiveX。注意:避免版本升级问题,最好将VI复制到vi.lib外的目录。
594 3
|
算法 机器人 数据挖掘
量化合约套利机器人策略开发部署执行逻辑源码实例分析
量化合约套利机器人策略开发部署执行逻辑源码实例分析
|
关系型数据库 数据库 数据格式
全文检索技术--理论篇
全文检索技术 什么是全文检索技术? 数据分类,一共分为两种:结构化数据和非结构化数据 通俗上讲,做开发的同学应该对结构化的数据已经非常的了解。
4301 0
|
网络协议 Shell Linux
【网安神器篇】——瑞士军刀Netcat
今天给大家分享的网络安全神器是网安界的瑞士军刀——Netcat
593 0
【网安神器篇】——瑞士军刀Netcat