我一直在使用 JavaMail API(以 Gmail 作为我的主机),并对如何使用它发送电子邮件有一个大致的了解。但有两行代码仍然让我困惑。
message.setFrom(new InternetAddress(USERNAME));
API 表示,这用于“设置此消息中的“From”属性”。但是,当我从代码中删除此行并发送电子邮件时,与该行存在时相比,电子邮件没有明显的变化。我认为 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 protected] /cdn-cgi/l/email-protection";
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();
}
}
}