前言
大家请注意:以下代码使用的测试邮箱为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的错误码代表的意思。这种情况一般就是被判定为垃圾邮件了。
其次,测试时不要频繁运行(发送)上述代码中的邮件,太频繁了,也容易判定为垃圾邮件。好了,以上就是这篇文章的全部内容了,希望对大家的学习和工作能有所帮助。