0

Google エンジン経由でメールを受信する方法を理解しました。今、私は電子メールが受信されたという確認を送信しようとしていますが、このエラーが発生し続けています:

com.jkimgroup.emailtospreadsheet.MailHandlerServlet doPost:
  MessagingException: javax.mail.SendFailedException: 
  Send failure (javax.mail.MessagingException: 
  Could not connect to SMTP host: localhost, port: 25 (java.net.SocketException: Permission denied:
  Attempt to access a blocked recipient without permission.))

「差出人」アドレスを管理者の電子メールに設定しています。/WEB-INF/lib フォルダーに正しい jar ファイルが含まれていない可能性があるため、これはエラー メッセージですか?

そして、Google の標準的な例を使用しました: https://developers.google.com/appengine/docs/java/mail/usingjavamail

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

    // ...
    Properties props = new Properties();
    Session session = Session.getDefaultInstance(props, null);

    String msgBody = "...";

    try {
        Message msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
        msg.addRecipient(Message.RecipientType.TO,
                         new InternetAddress("user@example.com", "Mr. User"));
        msg.setSubject("Your Example.com account has been activated");
        msg.setText(msgBody);
        Transport.send(msg);

    } catch (AddressException e) {
        // ...
    } catch (MessagingException e) {
        // ...
    }

更新 私は、公式ドキュメントが JavaMail 1.4.7 の使用を指し示しているにもかかわらず、メール処理の代わりに appengine ライブラリを使用することになっているのではないかと考え始めていますか?

その場合、コードにインポートしたライブラリを次に示します。

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.Timestamp;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Properties;
import java.util.TimeZone;
import java.util.logging.Logger;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//Am I supossed to import this one instead of the javax.mail.* jars?
//import com.google.appengine.api.mail.MailService.Message;
import com.google.appengine.api.users.User;
import com.google.gdata.client.spreadsheet.SpreadsheetService;
import com.google.gdata.data.spreadsheet.ListEntry;
import com.google.gdata.util.AuthenticationException;
import com.google.gdata.util.ServiceException;

UPDATE 2 FIXED NOW 私は Oracle の JavaMail JAR をアプリに追加しましたが、次のように問題が発生しました。

必要な JavaMail クラスはすべて App Engine SDK に含まれています。Oracle® の JavaMail JAR をアプリに追加しないでください。その場合、アプリは例外をスローします。

https://developers.google.com/appengine/docs/java/mail/?csw=1

4

1 に答える 1

0

これは決定的な答えではありません...

例外メッセージには次のように記載されています。

Could not connect to SMTP host: localhost, port: 25 
        (java.net.SocketException: Permission denied:
         Attempt to access a blocked recipient without permission.))

そのため、トランスポートは、GAE と同じマシンで実行されている SMTP サービスを使用しようとしています。しかし、エラー メッセージは、接続に成功したことを示しているようで、SMTP サービスは受信者への配信のために電子メールを受け入れることを拒否しました。

したがって、次のことを行うことをお勧めします。

  • 「xxx@example.com」アドレスではなく、実際のメールアドレスで試してみてください。
  • ローカル MTA サービス (それが何であれ) の構成を調べて、電子メールを外部アドレスにリレーするように構成されているかどうかを確認します。
  • MTA ログ ファイルを確認します。メール拒否の記録があるはずです。
于 2013-08-08T00:29:16.580 に答える