我正在尝试使用JavaMail从我的应用程序中使用Exchange身份验证来执行此操作。有人可以给我一个指导吗? 身份验证后,我需要发送邮件,这是我使用JavaMail的主要原因。 我发现的所有链接都谈到了这个问题,但我认为从Java开始这一定很容易。 提前谢谢。
答案 0 :(得分:6)
验证后我需要发送邮件
以下示例适用于Exchange服务器:
Properties properties = new Properties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.smtp.host", "mail.example.com");
properties.put("mail.smtp.port", "2525");
properties.put("mail.smtp.auth", "true");
final String username = "username";
final String password = "password";
Authenticator authenticator = new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
};
Transport transport = null;
try {
Session session = Session.getDefaultInstance(properties, authenticator);
MimeMessage mimeMessage = createMimeMessage(session, mimeMessageData);
transport = session.getTransport();
transport.connect(username, password);
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());
} finally {
if (transport != null) try { transport.close(); } catch (MessagingException logOrIgnore) {}
}
答案 1 :(得分:5)
这是一个很好的问题!我已经解决了这个问题。
首先,您应该导入jar ews-java-api-2.0.jar
。如果你使用maven,你可以将以下代码添加到pom.xml
<dependency>
<groupId>com.microsoft.ews-java-api</groupId>
<artifactId>ews-java-api</artifactId>
<version>2.0</version>
</dependency>
其次,您应该使用名为MailUtil.java
的新java类。默认情况下,某些Exchange Server不启动SMTP
服务,因此我们使用Microsoft Exchange WebServices(EWS)
代替SMTP
服务。
MailUtil.java
package com.spacex.util;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.core.enumeration.misc.ExchangeVersion;
import microsoft.exchange.webservices.data.core.service.item.EmailMessage;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.property.complex.MessageBody;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.net.URI;
/**
* Exchange send email util
*
* @author vino.dang
* @create 2017/01/08
*/
public class MailUtil {
private static Logger logger = LoggerFactory.getLogger(MailUtil.class);
/**
* send emial
* @return
*/
public static boolean sendEmail() {
Boolean flag = false;
try {
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1); // your server version
ExchangeCredentials credentials = new WebCredentials("vino", "abcd123", "spacex"); // change them to your email username, password, email domain
service.setCredentials(credentials);
service.setUrl(new URI("https://outlook.spacex.com/EWS/Exchange.asmx")); //outlook.spacex.com change it to your email server address
EmailMessage msg = new EmailMessage(service);
msg.setSubject("This is a test!!!"); //email subject
msg.setBody(MessageBody.getMessageBodyFromText("This is a test!!! pls ignore it!")); //email body
msg.getToRecipients().add("123@hotmail.com"); //email receiver
// msg.getCcRecipients().add("test2@test.com"); // email cc recipients
// msg.getAttachments().addFileAttachment("D:\\Downloads\\EWSJavaAPI_1.2\\EWSJavaAPI_1.2\\Getting started with EWS Java API.RTF"); // email attachment
msg.send(); //send email
flag = true;
} catch (Exception e) {
e.printStackTrace();
}
return flag;
}
public static void main(String[] args) {
sendEmail();
}
}
如果您想获得更多详细信息,请参阅https://github.com/OfficeDev/ews-java-api/wiki/Getting-Started-Guide
答案 2 :(得分:3)
适合我:
Properties props = System.getProperties();
// Session configuration is done using properties. In this case, the IMAP port. All the rest are using defaults
props.setProperty("mail.imap.port", "993");
// creating the session to the mail server
Session session = Session.getInstance(props, null);
// Store is JavaMails name for the entity holding the mails
Store store = session.getStore("imaps");
// accessing the mail server using the domain user and password
store.connect(host, user, password);
// retrieving the inbox folder
Folder inbox = store.getFolder("INBOX");
此代码基于下载java邮件时的示例代码。
答案 3 :(得分:3)
Microsoft发布了一个用于连接到Exchange Web服务的开源API
答案 4 :(得分:1)
默认情况下,Exchange无法启动 SMTP 服务,因此我们无法使用SMTP protocol
连接到Exchange服务器并尝试发送电子邮件。 BalusC可以正常使用上面的代码,因为您的邮件服务器管理员在Exchange上启用了SMTP服务。在大多数情况下,SMTP被禁用。我也在寻找解决方案。
This 是我找到的最好的答案,但令人沮丧的是你必须在60天后付钱。
答案 5 :(得分:0)
某些Exchange服务器未启用smtp协议 在这些情况下,您可以使用DavMail。
答案 6 :(得分:0)
尝试了ews-java-api,正如Populus在之前的评论中提到的那样。它是在带有jdk1.6的Java SE环境中完成的,它就像魅力一样 这些是我必须与我的样本相关联的库:
希望它有所帮助。
答案 7 :(得分:0)
以上建议的包装基本上已经寿命终止了。
来自https://github.com/OfficeDev/ews-java-api
从2018年7月19日开始,Exchange Web服务(EWS)将不再接收功能更新。尽管该服务将继续接收安全更新和某些非安全更新,但产品设计和功能将保持不变。此更改也适用于Java和.NET的EWS SDK。这里的更多信息:https://developer.microsoft.com/en-us/graph/blogs/upcoming-changes-to-exchange-web-services-ews-api-for-office-365/
答案 8 :(得分:0)
已解决
只需将以下内容添加到您的 pom.xml 依赖项
<dependency>
<groupId>javax.xml.ws</groupId>
<artifactId>jaxws-api</artifactId>
<version>2.3.1</version>
</dependency>
似乎 JAVA 11+ 中缺少 jaxws-api