Проверка подлинности JavaMail Exchange - PullRequest
9 голосов
/ 11 ноября 2009

Я пытаюсь использовать аутентификацию Exchange из моего приложения, используя JavaMail, чтобы сделать это. Может ли кто-нибудь дать мне руководство для этого? После аутентификации мне нужно отправлять письма, это основная причина, по которой я использую JavaMail. Все ссылки, которые я нашел, говорят о проблемах с этим, но я думаю, что это должно быть легко сделать из Java. Заранее спасибо.

Ответы [ 7 ]

6 голосов
/ 11 ноября 2009

После аутентификации мне нужно отправлять письма

Приведенный ниже пример прекрасно работает с серверами 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) {}
}
5 голосов
/ 08 января 2017

Хороший вопрос! Я решил эту проблему.

Во-первых, вы должны импортировать банку 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>

Во-вторых, вам следует создать новый класс Java с именем MailUtil.java. Некоторые серверы Exchange по умолчанию не запускают службу 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

3 голосов
/ 04 февраля 2015

Microsoft выпустила API с открытым исходным кодом для подключения к веб-службе Exchange

https://github.com/OfficeDev/ews-java-api

3 голосов
/ 11 ноября 2009

у меня работает:

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 почты.

1 голос
/ 10 июля 2010

Exchange по умолчанию не запускает SMTP , поэтому мы не можем использовать SMTP protocol для подключения к серверу Exchange и попытки отправки электронной почты. BalusC может нормально работать с приведенным выше кодом, поскольку администратор почтового сервера включил службу SMTP на Exchange. В большинстве случаев SMTP отключен. Я также ищу решение.

Этот - лучший ответ из того, что я нашел, но какое разочарование вызывает то, что вы должны заплатить за него через 60 дней.

0 голосов
/ 05 июля 2016

Пробовал ews-java-api, как упоминал Populus в предыдущем комментарии. Это было сделано в среде Java SE с jdk1.6 и работает как шарм.
Вот те библиотеки, которые мне пришлось связать с моим образцом:

  • Обще-кли-1.2.jar
  • Обще-кодек-1.10.jar
  • Обще-lang3-3.1.jar
  • Обще-каротаж 1.2.jar
  • EWS-ява-апи-2.0.jar
  • HttpClient-4.4.1.jar
  • httpcore-4.4.5.jar

Надеюсь, это поможет.

0 голосов
/ 28 сентября 2012

На некоторых серверах Exchange протокол SMTP не включен.
В этих случаях вы можете использовать DavMail .

...