gpt4 book ai didi

java - 通过中继服务器用 Java 发送电子邮件

转载 作者:行者123 更新时间:2023-11-29 03:19:55 25 4
gpt4 key购买 nike

我正在运行一个 Java 网络应用程序并试图从中发送电子邮件通知。当我们在我们的一台服务器上托管这个应用程序时,它运行得非常好。我们将其指向端口 25 上的 smtp.gmail.com 以及我们能够发送的消息。

但出于安全目的,现在我们将其托管在我们客户的一台服务器上。他们碰巧阻止了所有 smtp 域,只允许他们自己的域 (SMTPRELAY.COMPANYNAME.COM)。我更改了代码中的主机,但现在身份验证失败。

在使用该公司的中继服务器发送电子邮件时是否仍然可以验证我的 gmail 帐户?什么是最佳解决方案?

下面是代码的相关部分。

content = "message content";
List<String> recipients = LIST_OF_RECIPIENT_EMAIL_ADDRESSES;

Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "SMTPRELAY.COMPANYNAME.COM");
props.put("mail.smtp.port", "25");
props.put("mail.smtp.ssl.trust", "SMTPRELAY.COMPANYNAME.COM");
props.put("mail.debug", "true");

Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
//This is where the email account name and password are set
return new PasswordAuthentication("SUPPORTEMAILACCOUNT@gmail.com", "PASSWORD");
}
});
try{
MimeMessage message = new MimeMessage(session);

message.setReplyTo(new Address[]{new InternetAddress("no-reply@gmail.com")});
for(String recipient: recipients){
message.addRecipient(Message.RecipientType.BCC,new InternetAddress(recipient));
}
message.setSubject(subject);
message.setContent(content,"text/html");
Transport.send(message);
return true;
}catch (MessagingException mex) {
mex.printStackTrace();
return false;
}

这是我不断收到的错误:

javax.mail.AuthenticationFailedException: 535 5.7.3 Authentication unsuccessful

最佳答案

事实证明,公司中继 smtp 服务器可以在没有身份验证的情况下使用任何具有其域的欺骗性电子邮件地址(例如 ANYUSERNAME@COMPANYNAME.COM)。因此,针对 smtp.gmail.com 进行身份验证的需求变得毫无意义。

仍然好奇是否可以在通过另一个发送实际消息的同时针对被阻止的 smtp 进行身份验证。但是我的问题已经解决了。

如果您对如何在没有身份验证的情况下发送电子邮件感到好奇,可以在很多地方查找如何做到这一点,但基本上只需更改我原始问题中的代码:

props.put("mail.smtp.auth", "true");
.
.
.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(email+"@"+domain, password);
}
});

将上面的部分改成如下:

props.put("mail.smtp.auth", "false");
.
.
.
Session session = Session.getInstance(props);

关于java - 通过中继服务器用 Java 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24291412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com