前言
大家請注意:以下代碼使用的測試郵箱為126的郵箱,實測可用,注意,個人測試時,注意發送的郵件內容,郵件內容郵箱服務器審查較嚴格,少有不慎就會被判定為垃圾郵件,進而就會給你返回一個錯誤碼:
實例代碼
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("[email protected]", "用戶名: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("[email protected]"); // //收件人地址// 創建郵件體: 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("發送完畢"); }}注意,首次使用本代碼的朋友們,建議除了用戶名和密碼換成自己的,其餘的最好先不要改,否則很容易被網易郵箱判定為垃圾郵件而不給發送,一般判定為垃圾郵件時,網易返回的錯誤碼如下:
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的錯誤碼代表的意思。這種情況一般就是被判定為垃圾郵件了。
其次,測試時不要頻繁運行(發送)上述代碼中的郵件,太頻繁了,也容易判定為垃圾郵件。好了,以上就是這篇文章的全部內容了,希望對大家的學習和工作能有所幫助。