利用Java發送郵件的實現代碼_java

來源:互聯網
上載者:User

前言

大家請注意:以下代碼使用的測試郵箱為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的錯誤碼代表的意思。這種情況一般就是被判定為垃圾郵件了。

其次,測試時不要頻繁運行(發送)上述代碼中的郵件,太頻繁了,也容易判定為垃圾郵件。好了,以上就是這篇文章的全部內容了,希望對大家的學習和工作能有所協助。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.