簡體   English   中英

Gmail作為JavaMail SMTP服務器

[英]Gmail as JavaMail SMTP server

我一直在使用以Gmail為主機的JavaMail API,並且對如何使用它發送電子郵件有一般的了解。 但是仍然有兩行代碼使我感到困惑。

message.setFrom(new InternetAddress(USERNAME));

API表示,這用於“設置此消息中的“發件人”屬性。 但是,當我從代碼中刪除此行並發送電子郵件時,與出現該行時相比,電子郵件沒有明顯的變化。 我認為這對於防止垃圾郵件在Gmail上是有目的的,這使我想知道在將Gmail用作主機時是否完全有必要這樣做。

這也給我帶來麻煩。

props.put("mail.smtp.auth", "true");

根據我收集到的信息,這表明主機是否需要身份驗證,Gmail則需要。 但是,將其設置為false似乎無濟於事,並且消息的發送時間與設置為true時相同。 為什么會這樣呢?

謝謝你的幫助。 如果有幫助,這是我的所有代碼。

import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import java.util.Properties;
public class SendEmail
{
    private String msg;
    private String className;
    private final String USERNAME = "email@gmail.com";
    private final String PASSWORD = "password";
    private final String HOST = "smtp.gmail.com";
    public SendEmail(String email, String text, String title)
    {
        String to = email;
        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.host", HOST);
        props.put("mail.smtp.port", "587");
        Session session = Session.getInstance(props, null);
        try
        {
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress(USERNAME));
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
            message.setSubject(title);
            message.setText(text);

            Transport.send(message, USERNAME, PASSWORD);
            msg = "Email Successfully Sent";
        }
        catch(Exception ex)
        {
            msg = ex.getClass().getName();
        }
    }
}

首先,

message.setFrom(new InternetAddress(USERNAME));

正在使用RFC 5321-第3.3節“郵件交易 MAIL命令(包括FROM )。 同樣, mail.smtp.auth似乎是可選的

props.put("mail.smtp.auth", "true");`

因為該庫假定您在以下位置指定USERNAMEPASSWORD時要使用mail.smtp.auth

Transport.send(message, USERNAME, PASSWORD);

Transport.send(Message, String, String) Javadoc說(部分)

使用指定的用戶名和密碼對郵件服務器進行身份驗證。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM