服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服务器之家 - 编程语言 - JAVA教程 - 利用Java发送邮件的实现代码

利用Java发送邮件的实现代码

2020-06-09 11:43daisy JAVA教程

这篇文章给大家分享了如何利用Java发送邮件,文章通过实例代码介绍的很详细,有需要的可以参考借鉴。

前言

大家请注意:以下代码使用的测试邮箱为126的邮箱,实测可用,注意,个人测试时,注意发送的邮件内容,邮件内容邮箱服务器审查较严格,少有不慎就会被判定为垃圾邮件,进而就会给你返回一个错误码:

实例代码

?
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import java.util.Date;
import java.util.Properties;
 
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
 
public class SendMailUtil {
 
 private static final String USERNAME = "用户名"; // 发送人的用户名
 private static final String PASSWORD = "密码"; // 发送邮件人的密码
 private static final String HOSTNAME = "smtp.126.com"; // smtp服务器地址
 private static final String FROMADDRESS = USERNAME + "@126.com"; // 发件人邮箱
 private static final String FROMUSERNAME = "CNCD-码上中国博客"; // 发件人姓名,可随意写
 private static final String EMAILTITLE = "码上中国博客"; // 邮件标题
 private static final String EMAILCONTENT = "欢迎使用 CNCD-码上中国博客激活邮件 ,请点击右侧链接完成账号激活:\n";// 邮件内容
 
 public static void main(String[] args) {
 try {
  sendEmail("825338623@qq.com", "用户名:guopengfei,密码:guopengfei");
 } catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
 
 /**
 * 发送邮件
 * @param sendAddress 要发送的邮箱地址
 * @param content 发送的内容
 * @throws Exception
 */
 public static void sendEmail(String sendAddress, String content)
  throws Exception {
 
 // 创建一个连接属性。
 Properties props = new Properties(); //
 props.put("mail.smtp.host ", HOSTNAME); // 设置smtp的服务器地址是smtp.126.com
 props.put("mail.smtp.auth", "true"); // 设置smtp服务器要身份验证。
 props.put("mail.transport.protocol", "stmp");
 Session session = Session.getInstance(props, new Authenticator() {
  protected PasswordAuthentication getPasswordAuthentication() {
  return new PasswordAuthentication(USERNAME, PASSWORD);
  }
 });
 Message message = new MimeMessage(session);
 InternetAddress from = new InternetAddress(FROMADDRESS); // 发送人地址
 from.setPersonal(MimeUtility.encodeText(FROMUSERNAME)); // 发件人名
 message.setFrom(from);
 // InternetAddress to = new InternetAddress("taozhida11@sina.cn");
 // //收件人地址
 
 // 创建邮件体:
 message.setRecipients(Message.RecipientType.TO,
  InternetAddress.parse(sendAddress));// 抄送给多个人的邮箱
 // message.setRecipient(Message.RecipientType.TO, to); // 只有抄送给自己的邮箱
 message.setSubject(MimeUtility.encodeText(EMAILTITLE)); // 邮件标题
 message.setSentDate(new Date());
 MimeMultipart msgMultipart = new MimeMultipart("mixed");// 指定为混合关系
 message.setContent(msgMultipart);
 // 邮件内容
 MimeBodyPart htmlPart = new MimeBodyPart();
 htmlPart.setContent(
  "<body><div style='width: 1000px;height: 300px;margin: 0px auto;margin-bottom:20px;border:1px solid #92B0DD;background-color: #FFFFFf;'><h3>这是系统自动发送的邮件,请勿回复!</h3><br/>"+
 content+"</div></body>",
  "text/html;charset=UTF-8");
 // TODO 组装的顺序非常重要,一定要先组装文本域,再组装文件
 msgMultipart.addBodyPart(htmlPart);
 // 组装附件
 // MimeBodyPart file = new MimeBodyPart();
 // FileDataSource file_datasource = new FileDataSource(
 // "D:\\report_data2.txt");
 // DataHandler dh = new DataHandler(file_datasource);
 // file.setDataHandler(dh);
 // // 附件区别内嵌内容的一个特点是有文件名,为防止中文乱码要编码
 // file.setFileName(MimeUtility.encodeText(dh.getName()));
 // msgMultipart.addBodyPart(file);
 message.saveChanges();
 
 // 发送邮件的过程:95188
 Transport transport = session.getTransport("smtp"); // 创建连接
 transport.connect(HOSTNAME, 25, USERNAME, PASSWORD); // 连接服务器
        // 服务名,端口,发送邮件用户名
        // (不要@后面),密码
 transport.sendMessage(message, message.getAllRecipients()); // 发送信息
 transport.close(); // 关闭
 System.out.println("发送完毕");
 
 }
}

注意,首次使用本代码的朋友们,建议除了用户名和密码换成自己的,其余的最好先不要改,否则很容易被网易邮箱判定为垃圾邮件而不给发送,一般判定为垃圾邮件时,网易返回的错误码如下:

?
1
2
3
4
5
6
7
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp2,DMmowACXoTzMk8VXVdKnEA--.1778S2 1472566222,please see http://mail.163.com/help/help_spam_16.htm?ip=117.114.147.13&hostid=smtp2&time=1472566222
 
 at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:1829)
 at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1634)
 at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:889)
 at SendMailUtil.sendEmail(SendMailUtil.java:88)
 at SendMailUtil.main(SendMailUtil.java:29)

意思是说,让你前往错误返回码中的链接里查看帮助信息,你可以进入链接,发现,就有上述554的错误码代表的意思。这种情况一般就是被判定为垃圾邮件了。

其次,测试时不要频繁运行(发送)上述代码中的邮件,太频繁了,也容易判定为垃圾邮件。好了,以上就是这篇文章的全部内容了,希望对大家的学习和工作能有所帮助。

延伸 · 阅读

精彩推荐
  • JAVA教程Java中管理资源的引用队列相关原理解析

    Java中管理资源的引用队列相关原理解析

    这篇文章主要介绍了Java中管理资源的引用队列相关原理解析,涉及到Java的垃圾回收机制方面的知识,需要的朋友可以参考下 ...

    爪哇小博3012020-03-13
  • JAVA教程Java中的5种同步辅助类介绍

    Java中的5种同步辅助类介绍

    你提交了一些任务,但你想等它们都完成了再做另外一些事情;你提交了一些任务,但是不想让它们立刻执行,等你喊123开始的时候,它们才开始执行;等...

    Java教程网2082019-11-20
  • JAVA教程Java中break、continue、return语句的使用区别对比

    Java中break、continue、return语句的使用区别对比

    这篇文章主要介绍了Java中break、continue、return语句的使用区别对比,本文用非常清爽简明的语言总结了这三个关键字的使用技巧,并用一个实例对比使用结果...

    junjie2452019-12-20
  • JAVA教程整理很详细的Java正则表达式使用大全

    整理很详细的Java正则表达式使用大全

    这篇文章为大家整理了很详细的Java正则表达式使用大全,大家在使用Java正则表达式的时候可查阅这篇文章,认为不错的朋友可以收藏起来 ...

    elleniou2342020-03-11
  • JAVA教程Springmvc restful配置遇到的小坑

    Springmvc restful配置遇到的小坑

    本文是小编给大家带了的Springmvc restful配置遇到的小小坑,小编给大家带来了问题原因及解决办法,非常不错,具有参考借鉴价值,感兴趣的朋友一起看下...

    超人不会飞飞飞3742020-05-27
  • JAVA教程Java中的Vector和ArrayList区别及比较

    Java中的Vector和ArrayList区别及比较

    这篇文章主要介绍了Java中的Vector和ArrayList区别及比较,本文从API、同步、数据增长、使用模式4个方面总结了它们之间的不同之处,需要的朋友可以参考下 ...

    junjie3542019-12-14
  • JAVA教程Java 交换两个变量的数值实现方法

    Java 交换两个变量的数值实现方法

    下面小编就为大家带来一篇Java 交换两个变量的数值实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    jingxian3592020-05-28
  • JAVA教程Java中常用的类型转换(推荐)

    Java中常用的类型转换(推荐)

    这篇文章主要介绍了Java中常用的类型转换(推荐)的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下 ...

    27780850011522020-05-19