前言
大家請注意:以下代碼使用的測試郵箱為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("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("發送完畢"); }}
注意,首次使用本代碼的朋友們,建議除了使用者名稱和密碼換成自己的,其餘的最好先不要改,否則很容易被網易郵箱判定為垃圾郵件而不給發送,一般判定為垃圾郵件時,網易返回的錯誤碼如下:
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的錯誤碼代表的意思。這種情況一般就是被判定為垃圾郵件了。
其次,測試時不要頻繁運行(發送)上述代碼中的郵件,太頻繁了,也容易判定為垃圾郵件。好了,以上就是這篇文章的全部內容了,希望對大家的學習和工作能有所協助。