我使用以下代码在域内发送邮件。
public void sendMail(String mailServer, String from, String to,
String subject, String messageBody, String[] attachments)
throws MessagingException, AddressException {
// Setup mail server
Properties props = System.getProperties();
props.put("mail.smtp.host", mailServer);
// Get a mail session
Session session = Session.getDefaultInstance(props, null);
// Define a new mail message
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
message.setSubject(subject);
// Create a message part to represent the body text
BodyPart messageBodyPart = new MimeBodyPart();
messageBodyPart.setText(messageBody);
// use a MimeMultipart as we need to handle the file attachments
Multipart multipart = new MimeMultipart();
// add the message body to the mime message
multipart.addBodyPart(messageBodyPart);
// add any file attachments to the message
addAtachments(attachments, multipart);
// Put all message parts in the message
message.setContent(multipart);
// Send the message
Transport.send(message);
System.err.println("Message Send");
}
protected void addAtachments(String[] attachments, Multipart multipart)
throws MessagingException, AddressException {
for (int i = 0; i < attachments.length ; i++) {
String filename = attachments[i];
MimeBodyPart attachmentBodyPart = new MimeBodyPart();
// use a JAF FileDataSource as it does MIME type detection
DataSource source = new FileDataSource(filename);
attachmentBodyPart.setDataHandler(new DataHandler(source));
// assume that the filename you want to send is the same as the
// actual file name - could alter this to remove the file path
attachmentBodyPart.setFileName(filename);
// add the attachment
multipart.addBodyPart(attachmentBodyPart);
}
}
但如果使用相同的代码我尝试在域外发送电子邮件,说我发送电子邮件从mjsharma@domain.com到mhsharma @ gmail,com然后它失败并给我以下错误。 550 5.7.1 Rcpt command failed: Mail denied due to site's policy
我在上面的代码中遗漏了什么。 请帮帮我
答案 0 :(得分:1)
我怀疑您的代码中没有问题,但是在您的邮件服务器(sendmail
?)配置中。我会跟管理你邮件基础设施的人说话。
答案 1 :(得分:0)
您的本地邮件服务器可能需要您在向世界发送邮件之前进行身份验证。这是防止垃圾邮件发送者relaying their mail通过它的常见政策。
答案 2 :(得分:0)
假设您的计算机已安装Outlook ...您是否尝试过使用moyosoft的java outlook连接器?它使用非常简单并通过网络限制,因为它连接到您的Outlook应用程序然后发送邮件,因此如果您的Outlook客户端工作正常,将忽略对smtp端口或服务器/代理策略的任何限制。
如果您使用命令行服务器端进行此操作,那么我猜这个答案对您来说毫无用处。
来源:我有类似的问题(不是相同的错误代码,更像是内部网限制)并且使用此库解决了我的问题,因为上面发布了。