OK當咱們使用465端口SSL協議的時候,順利的在服務器上發出郵件了。
咱們傳統使用的比較簡單的是 STMP 25端口收發郵件css
今天發現剛購買的阿里雲服務器不能做爲客戶端經過STMP 25端口發送郵件html
開始在網上有說發現是JDK1.8的緣由,而後本身也把JDK1.8換到了JDK1.7 仍是不行,因此這裏排除了JDK的緣由。java
那麼問題來了,是否25端口不能鏈接適用喃?服務器
而後在終端輸入命令行 ,可測試25端口是否可鏈接。session
telnet smtp.163.com 25
返回成功 說明你的服務器 是沒有封掉25端口的。上面的圖是我本身的電腦,固然能連通。socket
當換到服務器測試的時候 就會出現一隻鏈接不成功 ide
找了好久的問題,忽然在阿里雲客服社區發現一個帖子,當中有客服的解釋,固然我不是第一個遇到這個問題的人。post
那麼客服的解釋一下就說明的問題:好像是將25端口封掉了 時間是2016年9月底之後新購買的服務器。測試
那麼問題找到了 那就須要將25端口換到465端口 採用SSL協議傳輸郵件。阿里雲
好了貼代碼時間到:
下面這段代碼是採用SSL協議發送郵件,可向多人單人發送郵件
package com.aaaa.util; import java.io.File; import java.io.UnsupportedEncodingException; import java.security.Security; import java.util.Date; import java.util.Map; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; 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; /** * 郵件處理類 * * @author jiafuwei * */ public class MailUtil { private static final String FROM_MAIL_SMTP = "smtp.exmail.qq.com"; private static final String FROM_MAIL_NAME = "aaaaaa@qq.com"; private static final String FROM_MAIL_PASS = "xxxxxxx"; /** * 發送郵件(靈活度高,通用版) * @param from 發件人 * @param to 收件人, 多個Email以英文逗號分隔 * @param cc 抄送, 多個Email以英文逗號分隔 * @param subject 主題 * @param content 內容 * @param fileList 附件列表 * @return */ public static boolean sendMail(String to, String cc, String subject, String content, String[] fileList){ try { Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; final Properties p = System.getProperties() ; p.setProperty("mail.smtp.host", FROM_MAIL_SMTP); p.setProperty("mail.smtp.auth", "true"); p.setProperty("mail.smtp.user", FROM_MAIL_NAME); p.setProperty("mail.smtp.pass", FROM_MAIL_PASS); p.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); p.setProperty("mail.smtp.socketFactory.fallback", "false"); //郵箱發送服務器端口,這裏設置爲465端口 p.setProperty("mail.smtp.port", "465"); p.setProperty("mail.smtp.socketFactory.port", "465"); // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session Session session = Session.getInstance(p, new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(p.getProperty("mail.smtp.user"),p.getProperty("mail.smtp.pass")); } }); session.setDebug(true); Message message = new MimeMessage(session); //消息發送的主題 message.setSubject(subject); //接受消息的人 message.setReplyTo(InternetAddress.parse(FROM_MAIL_NAME)); //消息的發送者 message.setFrom(new InternetAddress(p.getProperty("mail.smtp.user"),"河馬評測")); // 建立郵件的接收者地址,並設置到郵件消息中 String[] split = to.split(","); InternetAddress []tos = new InternetAddress[split.length]; for (int i = 0; i < split.length; i++) { tos[i]=new InternetAddress(split[i]); } // 設置抄送人 if (cc != null && cc.length() > 0) { message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(cc)); } message.setRecipients(Message.RecipientType.TO, tos); // 消息發送的時間 message.setSentDate(new Date()); Multipart mainPart = new MimeMultipart(); // 建立一個包含HTML內容的MimeBodyPart BodyPart html = new MimeBodyPart(); // 設置HTML內容 html.setContent(content, "text/html; charset=utf-8"); mainPart.addBodyPart(html); // 將MiniMultipart對象設置爲郵件內容 message.setContent(mainPart); // 設置附件 if (fileList != null && fileList.length > 0) { for (int i = 0; i < fileList.length; i++) { html = new MimeBodyPart(); FileDataSource fds = new FileDataSource(fileList[i]); html.setDataHandler(new DataHandler(fds)); html.setFileName(MimeUtility.encodeText(fds.getName(), "UTF-8", "B")); mainPart.addBodyPart(html); } } message.setContent(mainPart); message.saveChanges(); Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); return false; } catch (UnsupportedEncodingException e) { e.printStackTrace(); return false; } return true; } /** * 測試Mian方法 * * @param args */ public static void main(String[] args) { String content = "<html><head><style type='text/css'>p{padding-left:50px;font-family:'楷體';font-size:20px;}table{padding-left:50px;border:0;font-family:'楷體';font-size:30px;}</style></head><body>您好:<br/><p>申請編號爲"+"測試測試內容"+"的經銷商對訂單發起放棄簽約,具體信息以下:</p><table border='1' cellpadding='10' cellspacing='0'> <tr align='center'><td width='200'>經銷商</td> <td width='300'>"+"無需回覆"+"</td> </tr> <tr align='center'><td>申請編號</td><td>"+"測試測試內容"+"</td></tr> <tr align='center'><td>取消時間</td><td>"+"無需回覆"+"</td></tr> <tr align='center'><td>加裝GPS數量</td><td>"+"測試測試內容"+"</td></tr> <tr align='center'><td>GPS IMEI號</td><td>"+"測試測試內容"+"</td></tr><tr align='center'><td>店鋪地址</td><td>"+"測試測試內容"+"</td></tr> <tr align='center'><td>店鋪聯繫人姓名</td><td>"+"測試測試內容"+"</td></tr> <tr align='center'><td>店鋪聯繫人電話</td><td>"+"測試測試內容"+"</td></tr> </table><p>請及時聯繫GPS相關人員,安排上門拆裝,謝謝!</p>------------------------------------------------------------------------------</body></html>"; content = "<html><head><style type='text/css'>p{padding-left:50px;font-family:'楷體';font-size:20px;}table{padding-left:50px;border:0;font-family:'楷體';font-size:30px;}</style></head><body>Hey:<br/><p>咱們發現您的用戶評測報告已經出來了,趕忙來看看:</p><p>用戶:呂坤 手機號:17697182873 評測進度:3/9 (評測越多,報告越豐富哦):</p><p>河馬小提示:點擊連接查看報告</p><p>我的信用報告:<a href='https://axhub.im/pro/dbf03b6626db7bde/' target='_blank'>https://axhub.im/pro/dbf03b6626db7bde/</a></p><p>聯繫人信息:<a href='https://axhub.im/pro/dbf03b6626db7bde/' target='_blank'>https://axhub.im/pro/dbf03b6626db7bde/</a></p></body></html>"; System.out.println(content); String[] fileList = new String[1]; fileList[0] = "d:/pac.txt"; sendMail("123456@qq.com", "jiafw@yqjr.com.cn", "測試測試", content,fileList); } }
OK當咱們使用465端口SSL協議的時候,順利的在服務器上發出郵件了。