java email郵件傳送465
阿新 • • 發佈:2018-12-11
為什麼使用465埠呢:
因為阿里雲伺服器以安全為由將25埠給封了,無法使用25號埠傳送郵件,所以只有使用465埠啦。
準備條件
1.兩個jar包,網上到處都是隨便下載。
下面兩個網站有大量的jar包
2.如果可以,就準備一個配置檔案,但不準備也行,至於為什麼,看程式碼就知道了。
以下是使用465埠傳送文字郵件和帶有附件的郵件的例子。
package com.wenba1314.tools; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.*; import javax.mail.internet.*; import java.util.Properties; public class EmailTool { //建立pro用於儲存所需的資料 public static Properties pro; static { pro = new Properties(); try { /*載入配置檔案,配置檔案需要有 from欄位用於儲存發件人賬號 password為代理密碼 注意此密碼並非郵箱賬戶密碼,而是開啟客戶端代理時設定的密碼 */ pro.load(EmailTool.class.getClassLoader().getResourceAsStream("email.properties")); } catch (Exception e) { System.out.println("配置檔案未找到,使用預設的賬戶傳送!"); pro.setProperty("from", "********@163.com"); pro.setProperty("password", "********"); } pro.setProperty("mail.smtp.ssl.enable", "true"); pro.setProperty("mail.smtp.host", "smtp.163.com"); pro.setProperty("mail.smtp.port", "465"); pro.setProperty("mail.smtp.auth", "true"); pro.setProperty("mail.debug","true"); } public static void main(String[] args) { System.out.println(pro); sendTextMessage("********@qq.com","你是豬變得麼","豬啊"); sendEmailWithAttachments("********@qq.com","c:\\Users\\pc\\Desktop\\a.jpg","豬啊"); } //傳送普通的文字檔案,一般用於網站向用戶傳送驗證碼。第一個引數為收件人地址,第二個引數為文字資訊,第三個引數為郵件主題 public static void sendTextMessage(String toEmailAddress, String content, String subject) { //建立session物件,第一個引數為連線郵件伺服器的連線資訊,第二個為身份驗證的介面,重寫抽象方法,引數為登陸郵件伺服器的代理賬號密碼。 Session session = Session.getDefaultInstance(pro, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(pro.getProperty("from"), pro.getProperty("password")); } }); try { //建立訊息物件 MimeMessage message = new MimeMessage(session); //設定發件人 message.setFrom(new InternetAddress(pro.getProperty("from"))); //設定收件人 message.addRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(toEmailAddress)}); //設定文字主題 message.setSubject(subject); //設定文字內容 message.setText(content); //使用靜態方法傳送郵件,此靜態方法包裝了儲存內容,連線伺服器等方法。 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } //傳送帶附件的郵件,第一個引數為收件人地址,第二個引數為附件路徑,第三個引數為郵件主題 public static void sendEmailWithAttachments(String toEmailAddress,String NameOfTheAttachment ,String subject) { //建立session物件,第一個引數為連線郵件伺服器的連線資訊,第二個為身份驗證的介面,重寫抽象方法,引數為登陸郵件伺服器的代理賬號密碼。 Session session = Session.getDefaultInstance(pro, new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(pro.getProperty("from"), pro.getProperty("password")); } }); try { //建立訊息物件 MimeMessage message = new MimeMessage(session); //設定發件人 message.setFrom(new InternetAddress(pro.getProperty("from"))); //設定收件人 message.addRecipients(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(toEmailAddress)}); //設定文字主題 message.setSubject(subject); // 新增附件 /*建立multipart物件, *並向其中新增郵件的各個部分內容,包括文字內容和附件, * 然後將此物件放入MimeMessage物件中,使用message.setContent(multipart); * */ Multipart multipart = new MimeMultipart(); if (NameOfTheAttachment != null && !"".equals(NameOfTheAttachment)) { // 根據路徑獲取檔案 FileDataSource dataSource = new FileDataSource(NameOfTheAttachment); //建立附件物件 BodyPart bodyPart = new MimeBodyPart(); //設定附件內容 bodyPart.setDataHandler(new DataHandler(dataSource)); //設定附件名 //MimeUtility.encodeWord可以避免檔名亂碼 bodyPart.setFileName(MimeUtility.encodeWord(dataSource.getFile().getName())); //將附件放入multipart中 multipart.addBodyPart(bodyPart ); } // 將multipart放入message中 message.setContent(multipart); //使用靜態方法傳送郵件,此靜態方法包裝了儲存內容,連線伺服器等方法。 Transport.send(message); } catch (Exception e) { e.printStackTrace(); } } }