本文以163郵箱爲例html
一、準備(郵箱帳號,郵箱必須設置POP3/SMTP/IMAP,設置步驟以下:)java
》》步驟:1 開啓受權碼服務web
》》步驟:2 手機獲取驗證碼瀏覽器
》》步驟:3 設置受權碼服務器
》》步驟:4 開啓服務smtp/pop3/imapsession
》》步驟:5 開啓成功,忘記受權碼可重設maven
二、發送郵件的jar包(如下使用的爲maven的pom座標)oop
<dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>1.4</version> </dependency>
三、代碼實現網站
import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Properties; //發送郵件 public class test { //配置信息 private static final String MAIL_TRANSPORT_PROTOCOL ="mail.transport.protocol";//郵件的傳輸協議 private static final String MAIL_TRANSPORT_PROTOCOL_VALUE ="smtp";//使用smtp協議 private static final String MAIL_HOST ="mail.host";//發送郵件的主機 private static final String MAIL_HOST_VALUE ="smtp.163.com"; //發送郵件的服務器地址 private static final String MAIL_DEBUG ="mail.debug"; //調試模式 private static final String MAIL_SMTP_AUTH ="mail.smtp.auth";//郵件smtp做者確認 private static final String CONFIRM ="true";//確認 private static final String SEND_ENCODING_LAYOUT ="text/html;charset=utf-8";//發送郵件的編碼格式 //郵件編輯信息(僅需寫上本身的) private static final String MAIL_FROM =xxx@163.com";//郵件發送人 private static final String MAIL_FROM_PASSWORD ="xxxxx";//郵件發送人受權碼 private static final String MAIL_SUBJECT_REGISTER ="xxxx【註冊連接】";//郵件主題(註冊連接) private static final String MAIL_SUBJECT_VERIFY_CODE ="xxxx【郵箱驗證碼】";//郵件主題(郵箱驗證碼) private static final String MAIL_ORGANIZATION ="xxxx";//郵件組織 private static final String MAIL_WEBSITE ="https://www.xxxx.com/";//組織主頁 private static final String MAIL_ORGANIZATION_LOGO ="https://wwwxxxx.com/xxxx/xxxlogo.jpg";//網站logo private static final String MAIL_ORGANIZATION_QRCODE ="https://www.xxxx.com/xxxx/xxx.jpg";//網站二維碼圖片 public static void main(String[] args) throws Exception{ sendEmail(MAIL_FROM, "xxxx@qq.com", MAIL_SUBJECT_REGISTER, prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE, MAIL_ORGANIZATION_LOGO, prettyRegisterLayout("2小時",MAIL_ORGANIZATION,"https://www.xxxx.com/user/register/8asc824jnd741n2c"), MAIL_ORGANIZATION_QRCODE), MAIL_FROM_PASSWORD); sendEmail(MAIL_FROM, "xxxx@qq.com", MAIL_SUBJECT_VERIFY_CODE, prettyLayout(MAIL_ORGANIZATION,MAIL_WEBSITE, MAIL_ORGANIZATION_LOGO, prettyQrCodeLayout("2分鐘","580123"), MAIL_ORGANIZATION_QRCODE), MAIL_FROM_PASSWORD); } /** * 發送郵件 * @param from 發送人(郵箱地址) * @param to 接收人 (郵箱地址) * @param subject 主題 * @param content 內容 * @param password 密碼(密碼爲受權碼不是郵箱的登陸密碼) * @throws Exception */ public static void sendEmail(String from,String to,String subject,String content,String password) throws Exception{ Properties props = new Properties();//key value:配置參數。真正發送郵件時再配置 props.setProperty(MAIL_TRANSPORT_PROTOCOL, MAIL_TRANSPORT_PROTOCOL_VALUE);//指定郵件發送的協議,參數是規範規定的 props.setProperty(MAIL_HOST, MAIL_HOST_VALUE);//指定發件服務器的地址,參數是規範規定的 // props.setProperty(MAIL_DEBUG, "true");//郵件發送的調試模式,參數是規範規定的 props.setProperty(MAIL_SMTP_AUTH, CONFIRM);//請求服務器進行身份認證。參數與具體的JavaMail實現有關 Session session = Session.getInstance(props);//發送郵件時使用的環境配置 session.setDebug(true); MimeMessage message = new MimeMessage(session); //設置郵件的頭 message.setFrom(new InternetAddress( from )); //誰發送的 message.setRecipients(Message.RecipientType.TO, to );//發送給誰 message.setSubject( subject ); //設置正文 message.setContent( content ,SEND_ENCODING_LAYOUT); // message.setText("<h1>hello</h1>");//純文本 message.saveChanges(); //發送郵件 Transport ts = session.getTransport(); ts.connect( from , password ); // 密碼爲受權碼不是郵箱的登陸密碼 ts.sendMessage(message, message.getAllRecipients());//對象,用實例方法} } /** * 郵件內容頭部 * @param websiteName 網站名稱 * @param principal 網站主頁 * @param principalImage 網站logo圖片超連接 * @param logoWidth logo圖片寬度 * @param logoHeight logo圖片高度 * @return */ private static String mailHead(String websiteName,String principal,String principalImage,String logoWidth,String logoHeight){ return "<div style=\"margin: 0 auto; text-align: left;\n" + "padding: 38px 50px; width: 560px; font-size: 14px;\n" + "color: #606060; background: #fff; border-radius:\n" + "2px; font-family:Tahoma,Helvetica,'microsoft\n" + "yahei','Hiragino Sans GB',Simsun,sans-serif;\n" + "box-shadow: 0 0 4px rgba(0,0,0,0.2);\">\n" + " <table style=\"margin: 0 auto;\n" + "text-align: left; font-size: 14px; color: #606060;\n" + "background: #fff; font-family: inherit;\n" + "font-family:Tahoma,Helvetica,'microsoft\n" + "yahei','Hiragino Sans GB',Simsun,sans-serif;\" width=\"560\" cellspacing=\"0\" cellpadding=\"0\" border=\"0\">\n" + " <tbody><tr>\n" + " <th colspan=\"2\"><a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\"><img src=\""+principalImage+"\" width=\""+logoWidth+"\" height=\""+logoHeight+"\"></a></th>\n" + " </tr>\n" + " <tr>\n" + " <td colspan=\"2\" style=\"font-size:\n" + "18px; padding: 30px 0\n" + "18px;\">尊敬的"+websiteName+"用戶:</td>\n" + " </tr>\n" + " <tr>\n" + " <td colspan=\"2\" style=\"line-height: 1.8;\">\n" + " \n" + "<div>歡迎使用"+websiteName+"!</div>\n"; } /** * 郵件內容腳部 * @param websiteName 網站名稱 * @param principal 網站主頁 * @param qrCode 二維碼圖片連接(可不填寫/僅支持第一張) * @return */ private static String mailFoot(String websiteName,String principal,String...qrCode){ SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"); String nowDate =sdf.format(new Date()); return " <tr>\n" + " <td colspan=\"2\" style=\"text-align:\n" + "right; line-height: 1.8; padding-bottom: 18px;\">\n" + " <div>"+websiteName+"團隊</div>\n" + " <div style=\"color:\n" + "#909090;\">"+nowDate+"</div>\n" + " </td>\n" + " </tr>\n" + (qrCode!=null&&qrCode.length!=0?setQrCode(websiteName,qrCode[0]):"")+ " <tr>\n" + " <td colspan=\"2\" style=\"padding-top: 20px; border-top: 1px solid\n" + "#e7e7e7; line-height: 1.8; font-size: 12px; color:\n" + "#909090;\">\n" + " <div>舒適提示:</div>\n" + " <div>1.\n" +websiteName+ "官方網址爲:<a href=\""+principal+"\" rel=\"noopener\" target=\"_blank\">"+principal+"</a>,請注意網址,防止釣魚。</div>\n" + " <div>2.\n" + "本郵件爲系統自動發出,請勿回覆。</div>\n" + " </td>\n" + " </tr>\n" + " </tbody></table>\n" + " </div>"; } /** * 輸出漂亮格式(帶logo,可帶二維碼) * @param websiteName 網站名稱 * @param principal 主頁地址 * @param principalImage 主頁logo 323 x 48 拉伸寬度爲 (超連接形式) * @param business 業務 * @param qrCode 二維碼 (超連接形式) * @return */ private static String prettyLayout(String websiteName,String principal,String principalImage,String business,String...qrCode){ return mailHead(websiteName,principal,principalImage,"","")+ business + mailFoot(websiteName,principal,qrCode); } /** * 二維碼 樣式A * @param websiteName //網站名稱 * @param qrCode //二維碼圖片連接 * @return */ private static String setQrCode(String websiteName,String qrCode){ return " <tr>\n" + " <td style=\"padding-bottom: 20px;\" width=\"145\">\n" + " <img src=\""+qrCode+"\" width=\"110\" height=\"112\">\n" + " </td>\n" + " <td style=\"line-height: 2;\n" + "padding-bottom: 20px;\">\n" + " <div style=\"font-size: 18px;\n" + "color:\n" + "#03c5ff;\">掃描關注"+websiteName+"公衆號</div>\n" + " </td>\n" + " </tr>\n" ; } /** * 發送郵箱驗證碼 * @param validity 有效期/單位自行填寫 * @param verifyCode 驗證碼 * @return */ private static String prettyQrCodeLayout(String validity,String verifyCode){ return "<div>郵箱驗證碼的有效期爲:"+validity+"郵箱驗證碼以下:</div>\n" + " </td>\n" + " </tr>\n" + " <tr>\n" + " <td colspan=\"2\" style=\"font-size:\n" + "12px; line-height: 20px; padding-top: 14px;\n" + "padding-bottom: 25px; color: #909090;\">\n" + " <div>"+verifyCode+"</div>\n" + " </td>\n" + " </tr>\n"; } /** * 發送郵箱註冊激活連接 * @param validity 有效期/單位自行填寫 * @param websiteName 網站名 * @param verifyLink 註冊驗證連接 * @return */ private static String prettyRegisterLayout(String validity,String websiteName,String verifyLink){ return "<div>請點擊如下的連接驗證您的郵箱,驗證成功後就能夠使用"+websiteName+"提供的服務了。</div>\n" + " </td>\n" + " </tr>\n" + " <tr>\n" + " <td colspan=\"2\" style=\"font-size:\n" + "12px; line-height: 20px; padding-top: 14px;\n" + "padding-bottom: 25px; color: #909090;\">\n" + " <div>該連接的有效期爲"+validity+",如連接超過有效期請從新發送郵件<a href=\""+verifyLink+"\" style=\"color: #03c5ff; text-decoration:\n" + "underline;\" rel=\"noopener\" target=\"_blank\">"+verifyLink+"</a></div>\n" + " <div style=\"padding-top:\n" + "4px;\">(若是不能打開頁面,請複製該地址到瀏覽器打開)</div>\n" + " </td>\n" + " </tr>\n"; } }