通过Exchange Server使用Javamail发送电子邮件

通过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

我们有一个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.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”,对吗?你绝对不会发送任何看起来像垃圾邮件的东西,对吗?不,我从来没有说过它没有连接,当然有其他文本而不是内容,但没有任何内容接近垃圾邮件。。。当我发现我的错误时,我编辑了我的第一篇文章