下載和上傳附件、發(fā)送短信和發(fā)送郵件,都算是程序中很常用的功能,之前記錄了文件的上傳和下載還有發(fā)送短信,由于最近比較忙,郵件發(fā)送的功能就沒(méi)有時(shí)間去弄,現(xiàn)在終于成功以163郵箱發(fā)送郵件到qq郵箱,以下是相關(guān)代碼,具體解釋可以參考代碼中注釋:
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
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
package test; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Properties; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.BodyPart; 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 com.sun.mail.util.MailSSLSocketFactory; ///** // * // * @author tuzongxun123 // * @Description 郵件發(fā)送測(cè)試類 // */ public class sendMailTest { public static void main(String[] args) throws Exception { // 配置信息 Properties pro = new Properties(); pro.put( "mail.smtp.host" , "smtp.163.com" ); pro.put( "mail.smtp.auth" , "true" ); // SSL加密 MailSSLSocketFactory sf = null ; sf = new MailSSLSocketFactory(); // 設(shè)置信任所有的主機(jī) sf.setTrustAllHosts( true ); pro.put( "mail.smtp.ssl.enable" , "true" ); pro.put( "mail.smtp.ssl.socketFactory" , sf); // 根據(jù)郵件的會(huì)話屬性構(gòu)造一個(gè)發(fā)送郵件的Session,這里需要注意的是用戶名那里不能加后綴,否則便不是用戶名了 //還需要注意的是,這里的密碼不是正常使用郵箱的登陸密碼,而是客戶端生成的另一個(gè)專門的授權(quán)碼 MailAuthenticator authenticator = new MailAuthenticator( "tuzongxun123" , "客戶端授權(quán)碼" ); Session session = Session.getInstance(pro, authenticator); // 根據(jù)Session 構(gòu)建郵件信息 Message message = new MimeMessage(session); // 創(chuàng)建郵件發(fā)送者地址 // 設(shè)置郵件消息的發(fā)送者 message.setFrom(from); // 驗(yàn)證收件人郵箱地址 List<String> toAddressList = new ArrayList<>(); StringBuffer buffer = new StringBuffer(); if (!toAddressList.isEmpty()) { String regEx = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$" ; Pattern p = Pattern.compile(regEx); for ( int i = 0 ; i < toAddressList.size(); i++) { Matcher match = p.matcher(toAddressList.get(i)); if (match.matches()) { buffer.append(toAddressList.get(i)); if (i < toAddressList.size() - 1 ) { buffer.append( "," ); } } } } String toAddress = buffer.toString(); if (!toAddress.isEmpty()) { // 創(chuàng)建郵件的接收者地址 Address[] to = InternetAddress.parse(toAddress); // 設(shè)置郵件接收人地址 message.setRecipients(Message.RecipientType.TO, to); // 郵件主題 // message.setSubject("java郵件測(cè)試"); message.setSubject( "為什么錯(cuò)了" ); // 郵件容器 MimeMultipart mimeMultiPart = new MimeMultipart(); // 設(shè)置HTML BodyPart bodyPart = new MimeBodyPart(); // 郵件內(nèi)容 // String htmlText = "java郵件測(cè)試111"; String htmlText = "為什么錯(cuò)了" ; bodyPart.setContent(htmlText, "text/html;charset=utf-8" ); mimeMultiPart.addBodyPart(bodyPart); // 添加附件 List<String> fileAddressList = new ArrayList<String>(); fileAddressList .add( "C:\\Users\\tuzongxun123\\Desktop\\新建 Microsoft Office Word 文檔.docx" ); if (fileAddressList != null ) { BodyPart attchPart = null ; for ( int i = 0 ; i < fileAddressList.size(); i++) { if (!fileAddressList.get(i).isEmpty()) { attchPart = new MimeBodyPart(); // 附件數(shù)據(jù)源 DataSource source = new FileDataSource( fileAddressList.get(i)); // 將附件數(shù)據(jù)源添加到郵件體 attchPart.setDataHandler( new DataHandler(source)); // 設(shè)置附件名稱為原文件名 attchPart.setFileName(MimeUtility.encodeText(source .getName())); mimeMultiPart.addBodyPart(attchPart); } } } message.setContent(mimeMultiPart); message.setSentDate( new Date()); // 保存郵件 message.saveChanges(); // 發(fā)送郵件 Transport.send(message); } } } class MailAuthenticator extends Authenticator { /** * 用戶名 */ private String username; /** * 密碼 */ private String password; /** * 創(chuàng)建一個(gè)新的實(shí)例 MailAuthenticator. * * @param username * @param password */ public MailAuthenticator(String username, String password) { this .username = username; this .password = password; } public String getPassword() { return password; } @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } public String getUsername() { return username; } public void setPassword(String password) { this .password = password; } public void setUsername(String username) { this .username = username; } } |
注:我有個(gè)同事使用我這個(gè)代碼更換為他的賬號(hào)和客戶端授權(quán)碼后,一運(yùn)行就報(bào)錯(cuò),然后重置了一下郵箱的客戶端授權(quán)碼后,錯(cuò)誤便消失了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)java程序設(shè)計(jì)有所幫助。