1. 程式人生 > >java email郵件傳送465

java email郵件傳送465

為什麼使用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();
        }
    }
}