web-dev-qa-db-ja.com

JavaMailExchange認証

これを行うために、JavaMailを使用してアプリからExchange認証を使用しようとしています。誰かが私にこれを行うためのガイドを教えてもらえますか?認証後、メールを送信する必要があります。これが、JavaMailを使用している主な理由です。私が見つけたすべてのリンクはこれに関する問題について話しますが、これはJavaから行うのは簡単な作業に違いないと思います。前もって感謝します。

9
rafaelochoa

いい質問ですね!私はこの問題を解決しました。

まず、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>
_

次に、新しいJava _MailUtil.Java_という名前のクラスを作成する必要があります。一部のExchangeServerはデフォルトで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("[email protected]"); //email receiver
//        msg.getCcRecipients().add("[email protected]"); // 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();

    }
}
_

詳細を知りたい場合は、plsは https://github.com/OfficeDev/ews-Java-api/wiki/Getting-Started-Guide を参照してください。

7
Java Basketball

認証後、メールを送信する必要があります

以下の例は、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) {}
}
6
BalusC

Microsoftは、ExchangeWebサービスに接続するためのオープンソースAPIをリリースしました

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

3
Populus

私のために働く:

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

Exchangeはデフォルトで[〜#〜] smtp [〜#〜]サービスを開始しないため、SMTP protocolを使用して接続することはできませんExchangeサーバーに送信し、電子メールを送信してみてください。メールサーバー管理者がExchangeでSMTPサービスを有効にしているため、BalusCは上記のコードで正常に機能しますが、ほとんどの場合、SMTPは無効になっています。解決策も探しています。

This は私が見つけたものの中で最良の答えですが、60日後にそれを支払わなければならないという不満は何ですか。

1
tenebaul

以前のコメントでPopulusが述べたように、ews-Java-apiを試しました。これは、jdk1.6を使用するJava SE環境で実行され、魅力のように機能します。
これらは、サンプルに関連付ける必要のあるライブラリです。

  • commons-cli-1.2.jar
  • commons-codec-1.10.jar
  • commons-lang3-3.1.jar
  • commons-logging-1.2.jar
  • ews-Java-api-2.0.jar
  • httpclient-4.4.1.jar
  • httpcore-4.4.5.jar

それが役に立てば幸い。

0
Marco

一部のExchangeサーバーでは、SMTPプロトコルが有効になっていません。
このような場合は、 DavMail を使用できます。

0
BrunoJCM