My favorites | 中文(繁體) | Sign in
英文版或許有比此中譯版新的內容

使用 JavaMail

Mail Service Java API (郵件服務 Java API) 支援使用 JavaMail (javax.mail) 介面來傳送電子郵件。

如需詳細資訊,請參閱 Sun 的 JavaMail API 參考資料

傳送電子郵件訊息

若要傳送電子郵件訊息,應用程式會先準備 MimeMessage 物件,然後以 Transport 類別的靜態方法 send() 傳送該物件。郵件使用 JavaMail Session 物件建立。Session 和 Transport 不需要其他設定,即可在「應用服務引擎」郵件服務中使用。

import java.util.Properties;
import javax.mail.AddressException;
import javax.mail.InternetAddress;
import javax.mail.MessagingException;
import javax.mail.MimeMessage;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;

// ...
        Properties props = new Properties();
        Session session = Session.getDefaultInstance(props, null);

        String msgBody = "...";

        try {
            Message msg = new MimeMessage(session);
            msg.setFrom(new InternetAddress("admin@example.com"));
            msg.addRecipient(Message.RecipientType.TO,
                             new InternetAddress("user@example.com"));
            msg.setSubject("Your Example.com account has been activated");
            msg.setText(msgBody);
            Transport.send(msg);

        } catch (AddressException e) {
            // ...
        } catch (MessagingException e) {
            // ...
        }

呼叫郵件服務是非同步的,會立即傳回。郵件服務會管理連絡收件者的郵件伺服器和傳送郵件的程序。如果郵件無法傳送給任一收件者,或如果收件者的郵件伺服器傳回「退回」訊息,則錯誤的郵件會退還寄件者。

寄件者和收件者

寄件者和收件者電子郵件地址在 JavaMail 中會使用 InternetAddress 類別的實例來表示。建構函式以字串形式接受電子郵件地址,而如果電子郵件地址不是有效電子郵件地址,則會引發 AddressException。

若要設定寄件者地址,應用程式會呼叫 MimeMessage 物件中的 setFrom() 方法。寄件者必須是應用程式已註冊之開發人員的電子郵件地址,或以「Google 帳戶」登入之目前要求之使用者的電子郵件地址。

MimeMessage 物件中有多種方法可以建立收件者。addRecipient() 方法會接受收件者類型和電子郵件地址,並將其新增到該類的收件者清單中。收件者類型可以是 Message.RecipientType.TOMessage.RecipientType.CCMessage.RecipientType.BCC

您可以使用 setReplyTo() 方法設定「回覆」地址。

郵件和標頭

藉由呼叫 MimeMessage 物件中的方法,您可以建立郵件的內容。setSubject() 方法設定主旨,而 setText() 方法設定 (純文字) 本文內容。

基於安全性考量,郵件服務不允許在外寄電子郵件訊息中隨意自定標頭。部分標題可被郵件服務覆寫,例如郵件傳送日期。其他加入外寄電子郵件的標頭會被移除。

多組件郵件

您可以使用多組件郵件來傳送含檔案附件的郵件,或在純文字郵件本文外加入 HTML 訊息本文。您可以建立 MimeMultipart 物件以包含組件,然後為每個附件或其他郵件本文建立 MimeBodyPart 物件,然後加以新增到容器。最後,將容器指派給 MimeMessage 內容。

import javax.mail.MimeBodyPart;
import javax.mail.MimeMultipart;
import javax.mail.Multipart;
import javax.activation.DataHandler;

// ...
        String htmlBody;        // ...
        byte[] attachmentData;  // ...

        Multipart mp = new MimeMultipart();

        MimeBodyPart htmlPart = new MimeBodyPart();
        htmlPart.setContent(htmlBody, "text/html");
        mp.addBodyPart(htmlPart);

        MimeBodyPart attachment = new MimeBodyPart();
        attachment.setFileName("manual.pdf");
        attachment.setContent(attachmentData, "application/pdf");
        mp.addBodyPart(attachment);

        message.setContent(mp);

基於安全性的考量,郵件部分和附件必須是數種允許的類型之一,且附件檔名必須以該類型可辨識的副檔名結束。如需允許的類型和檔案名稱副檔名的清單,請參閱總覽:附件

不支援 JavaMail 功能

應用程式收不到電子郵件訊息。

應用程式無法使用 JavaMail 介面來連線其他郵件服務以傳送或接收電子郵件訊息。新增至 Transport 或 Session 的 SMTP 設定會被忽略。

低階 API 的功能

所有低階的服務 API 功能都可在 JavaMail 介面中使用。

低階 API 包括將郵件傳送給所有應用程式管理員的方法。若要在 JavaMail 進行此動作,請使用 admin@. ("admin"、AT 符號和句號) 做為收件者。