通过Exchange Server使用Javamail发送电子邮件
我们有一个Exchange服务器,我想用它来测试发送邮件。但不知何故,我总是犯错误:通过Exchange Server使用Javamail发送电子邮件,java,smtp,jakarta-mail,exchange-server,Java,Smtp,Jakarta Mail,Exchange Server,我们有一个Exchange服务器,我想用它来测试发送邮件。但不知何故,我总是犯错误: com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Message rejected as spam by Content Filtering. at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108) at com.sun.mail.smtp.SMTPTran
com.sun.mail.smtp.SMTPSendFailedException: 550 5.7.1 Message rejected as spam by Content Filtering.
at com.sun.mail.smtp.SMTPTransport.issueSendCommand(SMTPTransport.java:2108)
at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:1889)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:1120)
at javax.mail.Transport.send0(Transport.java:195)
at javax.mail.Transport.send(Transport.java:124)
at Test.sendMailJava(Test.java:89)
at Test.main(Test.java:29)
我试着查看我们的交换,如果允许匿名用户,我们的打印机也会在没有任何身份验证的情况下发送邮件
这是我的Java代码,希望有人能帮助我:
import java.net.URI;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import org.simplejavamail.email.Email;
import org.simplejavamail.mailer.Mailer;
import org.simplejavamail.mailer.config.ProxyConfig;
import org.simplejavamail.mailer.config.ServerConfig;
import org.simplejavamail.util.ConfigLoader;
public class Test {
public static void main(String[] args) {
//// // TODO Auto-generated method stub
sendMailJava();
}
public static void sendMailJava()
{
String to = "Recipient"
// Sender's email ID needs to be mentioned
String from = "Sender";
// Assuming you are sending email from localhost
String host = "Server Ip-Adress";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.port", "25");
properties.setProperty("mail.imap.auth.plain.disable","true");
properties.setProperty("mail.debug", "true");
Session session = Session.getDefaultInstance(properties);
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("Subject");
// Now set the actual message
message.setContent("Content", "text/html; charset=utf-8");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
我也尝试过SimpleEmail,但也有同样的错误
与smtp服务器的连接似乎正常,但无法发送邮件,这是上述错误的原因。可能是什么
您好
凯文
编辑:
我发现了我的错误,我不知道为什么我们的打印机可以发送没有错误的maisl,但似乎我必须在我们的exchange服务器上将我的ip列入白名单。代码完全正确
感谢您的帮助我知道您需要smtp选项,但我感觉问题在于服务器的设置方式,而不是代码。如果您获得了EWS Java Api,您可以直接登录到exchange服务器并通过这种方式获取邮件。以下是使其工作的代码:
public class ExchangeConnection {
private final ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); // change to whatever server you are running, though 2010_SP2 is the most recent version the Api supports
public ExchangeConnection(String username, String password) {
try {
service.setCredentials(new WebCredentials(username, password));
service.setUrl(new URI("https://(your webmail address)/ews/exchange.asmx"));
}
catch (Exception e) { e.printStackTrace(); }
}
public boolean sendEmail(String subject, String message, List<String> recipients, List<String> filesNames) {
try {
EmailMessage email = new EmailMessage(service);
email.setSubject(subject);
email.setBody(new MessageBody(message));
for (String fileName : fileNames) email.getAttachments().addFileAttachment(fileName);
for (String recipient : recipients) email.getToRecipients().add(recipient);
email.sendAndSaveCopy();
return true;
}
catch (Exception e) { e.printStackTrace(); return false; }
}
}
公共类交换连接{
private final ExchangeService service=new ExchangeService(ExchangeVersion.Exchange2010_SP2);//更改为您正在运行的任何服务器,尽管2010_SP2是Api支持的最新版本
公共ExchangeConnection(字符串用户名、字符串密码){
试一试{
设置凭据(新的WebCredentials(用户名、密码));
setUrl(新URI(“https://(您的Web邮件地址)/ews/exchange.asmx”);
}
catch(异常e){e.printStackTrace();}
}
公共布尔sendEmail(字符串主题、字符串消息、列表收件人、列表文件名){
试一试{
EmailMessage email=新的EmailMessage(服务);
email.setSubject(主题);
email.setBody(newmessagebody(message));
对于(字符串文件名:文件名)email.getAttachments().addFileAttachment(文件名);
对于(字符串收件人:收件人)email.getToRecipients().add(收件人);
email.sendAndSaveCopy();
返回true;
}
catch(异常e){e.printStackTrace();返回false;}
}
}
在代码中,您只需创建类,然后使用sendEmail方法向任何人发送电子邮件。您的JavaMail代码是,这可能就是服务器拒绝包含该错误消息的消息的原因。(垃圾邮件发送者通常使用开放式电子邮件服务器。)
更改您的代码以调用。为什么不让他们在exchange服务器上为您创建一个帐户并使用EWS发送邮件?我在服务器上有一个帐户,但我想尝试在不使用outlook的情况下发送电子邮件,就像我说的,我们的扫描仪和打印机也在不经过任何身份验证的情况下发送邮件,这没关系,所以它一定是起作用了。。。我的理论是邮件标题或文本中的某些内容不正常,因此垃圾邮件过滤器会立即捕获电子邮件,但我不知道我在办公室知道什么,smtp端口在我们的服务器上甚至没有打开。如果我是一名网络管理员,并且该端口是打开的,我会设置服务器,以便只有特定的IP可以使用该端口,其余的将被视为垃圾邮件。为什么smtp端口不应该打开?我是说我们公司想发邮件,对吗?我是我们公司的系统管理员,我看不到服务器有任何限制,因为Exchange不使用smtp。它使用MAPI。我会试试,如果我们有Exchange2007,我需要在服务器版本中添加什么?我可以在没有Outlook的情况下使用该功能吗?它直接支持2007。该“功能”与Outlook没有任何关系。它不需要使用电子邮件程序来获取您的电子邮件。。。它会与exchange服务器本身联系并发送电子邮件直接是什么意思?我需要写什么来代替Exchange2010_SP2?Exchange2007_SP2是您需要的标志。在我的例子中,我们有Exchange 2012,我必须使用Exchange 2010_SP2,所以它不直接支持我的Exchange服务器。正如我所说,我们的打印机也发送电子邮件,没有任何身份验证,所以它必须在没有它的情况下工作,但以防万一,我也尝试了你的方法,使用这种方法,我甚至无法连接到服务器身份验证失败了吗?您可能需要将属性
mail.smtp.ssl.enable
设置为true
。打印机可能会根据(例如)其IP地址在服务器上被列入白名单。在测试程序中,您是否从邮件服务器上的其他地址发送邮件?这说明了什么?没有身份验证没有失败,就像上面提到的错误一样,是垃圾邮件内容过滤器捕获了你说它没有连接的电子邮件。如果它不连接,你就不会得到那个错误。更清楚的是,你发送的实际内容只是一个单词“content”,对吗?你绝对不会发送任何看起来像垃圾邮件的东西,对吗?不,我从来没有说过它没有连接,当然有其他文本而不是内容,但没有任何内容接近垃圾邮件。。。当我发现我的错误时,我编辑了我的第一篇文章