java使用Ms exchange服务器发送电子邮件

时间:2018-04-16 09:28:56

标签: java javamail exchange-server

我有这个代码工作,使用Ms Exchange服务器发送电子邮件。

问题是它使用发件人电子邮件地址并且是pwd进行身份验证。

现在系统管理员告诉我,由于安全实施规则,必须使用用户名和密码进行身份验证,不需要电子邮件和密码。 目前找不到任何解决办法...我的工作代码:

props.put("mail.smtp.host", host.trim());
props.put("mail.smtp.port", port.trim());
props.put("mail.smtp.auth","true");
props.put("mail.smtp.starttls.enable", "false");
props.put("mail.smtp.quitwait","false");
props.put("mail.smtp.socketFactory.class",javax.net.ssl.SSLSocketFactory.class);
props.put("mail.smtp.socketFactory.fallback","true");
props.put("mail.debug","false");
props.put("mail.mime.charset","utf-8");
Session session = Session.getInstance(props, new javax.mail.Authenticator()
        {
          protected PasswordAuthentication getPasswordAuthentication() 
          {
            return new PasswordAuthentication(properties.getProperty("emailFrom"),properties.getProperty("emailPassword"));
          }
         });

1 个答案:

答案 0 :(得分:0)

如果我没记错的话,它是Exchange服务器上允许SMTP客户端使用用户名或电子邮件地址进行身份验证的设置。

有几种方法可以让它发挥作用。

  1. 在Exchange服务器上,通常电子邮件地址遵循固定名称约定规则,我们称之为地址策略。在某些组织中,电子邮件地址从用户名转换。这意味着您可以从电子邮件地址获取用户名。例如,如果我的用户名是dongmao,使用地址策略我的电子邮件地址可以是:

    username@domain.com - > dongmao@domain.com

    username.mail@domain.com - > dongmao.mail@domain.com

    所以只要问系统管理员是否有办法找出用户名。有关电子邮件地址政策的详细信息可以在here找到,如果您不是交换人员,我认为您不会感兴趣。

  2. 如果您正在处理Microsoft Exchange,那么我假设您使用的是Microsoft Active Directory环境。电子邮件地址和用户名实际上都是AD属性,并且它们都是唯一的,因此通过电子邮件地址查询用户名很容易,反之亦然。

    我没有手头的java代码来查询AD,但互联网上有很多,this可能是一个很好的代码。只需注意LDAP查询字符串。电子邮件地址AD中的属性名称为 proxyAddresses ,这是一个多值属性。 username属性为 samAccountName

  3. 如果您还有其他问题,请与我们联系。

相关问题