ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Java質問&情報提供サイトコミュのJavaMail

  • mixiチェック
  • このエントリーをはてなブックマークに追加
内部ドメインの人たちにはメールの配信ができるのですが外部のドメインに配信をしようとするとExceptionが発生して理由がいまいち掴めません(>_<)SessionクラスのsetDebug(true)でメールサーバとのやり取りがとれるらしく見てみたのですがいまいち何が原因なのかがわからない状況なので対処方法などをご存知の方はご教授くださいますでしょうか?

DEBUG: setDebug: JavaMail version 1.3.3
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth false
DEBUG SMTP: trying to connect to host "××.××.××.××", port ××, isSSL false
220 win01.willnet.ad.jp (IMail 8.21 36333-2) NT-ESMTP Server X1
DEBUG SMTP: connected to host "××.××.××.××", port: ××

EHLO コンピュータ名
250-win01.willnet.ad.jp says hello
250-SIZE 0
250-8BITMIME
250-DSN
250-ETRN
250-AUTH LOGIN CRAM-MD5
250-AUTH LOGIN
250-AUTH=LOGIN
250-EXPN
250 STARTTLS
DEBUG SMTP: Found extension "SIZE", arg "0"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN CRAM-MD5"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "EXPN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: use8bit false
MAIL FROM:<××××@××××.××.××>
250 ok
RCPT TO:<××××@yahoo.co.jp>
550 not local host yahoo.co.jp, not a gateway
DEBUG SMTP: Invalid Addresses
DEBUG SMTP: ××××@yahoo.co.jp
DEBUG SMTP: Sending failed because of invalid destination addresses
RSET
250 ok its reset
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 550 not local host yahoo.co.jp, not a gateway

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1141)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:536)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:80)
at Mail.main(Mail.java:48)
QUIT
javax.mail.SendFailedException: Invalid Addresses;
nested exception is:
class com.sun.mail.smtp.SMTPAddressFailedException: 550 not local host yahoo.co.jp, not a gateway

at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1141)
at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:536)
at javax.mail.Transport.send0(Transport.java:151)
at javax.mail.Transport.send(Transport.java:80)
at Mail.main(Mail.java:48)



なんとなくToの××××@yahoo.co.jpがよくないと思うんですが見ても何を直せば配信できるようになるかがわかりません。

申し訳ないですが都合の悪いアドレス等は修正させていただいてます!

以下はソースです。




Properties objPrp = new Properties();
objPrp.put("mail.smtp.host","××.××.××.××"); // SMTPサーバ名
// メールセッションを確立
Session session=Session.getDefaultInstance(objPrp,null);

session.setDebug(true);

// 送信メッセージを生成
MimeMessage objMsg = new MimeMessage(session);
try {
// 送信先(TOのほか、CCやBCCも設定可能)
objMsg.setRecipients(Message.RecipientType.TO,"××××@yahoo.co.jp");
// Fromヘッダ
InternetAddress objFrm=new InternetAddress("××××@××××.××.××","ナッシー");

objMsg.setFrom(objFrm);
// 件名
objMsg.setSubject("テスト","ISO-2022-JP");

// 本体
MimeMultipart mm = new MimeMultipart("alternative");
// 本文
MimeBodyPart mbText = new MimeBodyPart();
String message = "メール送信のテストを行います";
mbText.setText(message , "ISO-2022-JP");
mm.addBodyPart(mbText);

objMsg.setContent(mm);

// メール送信
Transport.send(objMsg);

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (MessagingException e) {

e.printStackTrace();

}

コメント(6)

こんにちわ。

僕もさぼてんDXさん同様、telnetなどでsmtpがうまくいってるか確認された方がよいかと思います。

メールサーバで受信制限などがされているのかも。。qmailならrcphostsです。
> 内部ドメインの人たちにはメールの配信ができるの
> ですが外部のドメインに配信をしようとすると
> Exceptionが発生して理由がいまいち掴めません

上記の答えと重複しますが、要するに smtp サーバの
設定(リレー)の問題だと思いますよ。

smtp サーバは基本的にメールの送信(中継含む)だけを
するものなのでクライアントからの接続が上手く行けば
どこにでもメールが送信できることになります。

ただし、その状態では誰でも好き勝手にメールが送信
できてしまうので、最近ではメールサーバの設定と
して、同じドメインを持っていないアドレスに関して
はメールを送信しないようになっていることがある
ようです。


> class com.sun.mail.smtp.SMTPAddressFailedException: 550 not local host yahoo.co.jp, not a gateway

エラーメッセージ見てもそんな感じに受け取れます。
yahoo.co.jp はローカルホストじゃないし、多分
このメールサーバはゲートウェイじゃないょ、って
ことではないでしょうか。


リレーに関してはここら辺が分かりやすいかと思います。
http://www.atmarkit.co.jp/fwin2k/operation/sbs200302/sbs200302_03.html
http://mtlab.ecn.fpu.ac.jp/WSM_2001/010624111118.html
皆さん書き込みありがとうございます。

正直この辺の知識はものすごくウトイく、意味不明な状態でしたが的確なキーワードをご教授いただいたおかげである程度は理解してきました。そこで認証をさせてメール送信をしたのですがまた問題が浮上してまた行き詰ってしまいました。こんな自分ですが再度救って下さい!

ひとまずtelnetでsmtpサーバに接続可能な状態でした。そしてpingでyahoo.co.jpにもパケットを送信できてます。

で、問題になった認証ですが

Properties objPrp = new Properties();
objPrp.put("mail.smtp.host","smtp.mail.yahoo.co.jp");
objPrp.put( "mail.smtp.auth", "true" );
// メールセッションを確立
Session session=Session.getDefaultInstance(objPrp , null);

session.setDebug(true);

// 送信メッセージを生成
MimeMessage objMsg = new MimeMessage(session);
try {
// 送信先(TOのほか、CCやBCCも設定可能)
objMsg.setRecipients(Message.RecipientType.TO,"○○○○@○○.○○.○○");
// Fromヘッダ
InternetAddress objFrm=new InternetAddress("××××@yahoo.co.jp","ナッシー");

objMsg.setFrom(objFrm);
// 件名
objMsg.setSubject("テスト","ISO-2022-JP");

// 本体
MimeMultipart mm = new MimeMultipart("alternative");
// 本文
MimeBodyPart mbText = new MimeBodyPart();
String message = "メール送信のテストを行います。";
mbText.setText(message , "ISO-2022-JP");
mm.addBodyPart(mbText);

objMsg.setContent(mm);

Transport tp = session.getTransport("smtp");
tp.connect("smtp.mail.yahoo.co.jp" , "ユーザ名" , "パスワード");

// メール送信
tp.sendMessage(objMsg , objMsg.getAllRecipients());

は正常に動き社内で使用している自分のアドレスにメールが届いてます。今度は逆に社内のsmtpから自分のyahooで持ってるアドレスにメールを送信しようを思うとうまく動きません。


DEBUG: setDebug: JavaMail version 1.3.3
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp", port 25, isSSL false
220 win01.willnet.ad.jp (IMail 8.21 49467-4) NT-ESMTP Server X1
DEBUG SMTP: connected to host "smtp", port: 25

EHLO aaaaa
250-win01.willnet.ad.jp says hello
250-SIZE 0
250-8BITMIME
250-DSN
250-ETRN
250-AUTH LOGIN CRAM-MD5
250-AUTH LOGIN
250-AUTH=LOGIN
250-EXPN
250 STARTTLS
DEBUG SMTP: Found extension "SIZE", arg "0"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN CRAM-MD5"
DEBUG SMTP: Found extension "AUTH", arg "LOGIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg ""
DEBUG SMTP: Found extension "EXPN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
dGFrYW5hc2hp
334 UGFzc3dvcmQ6
dGFrYW5hc2hpMjU=
500 failed authentication
javax.mail.AuthenticationFailedException
at javax.mail.Service.connect(Service.java:267)
at javax.mail.Service.connect(Service.java:137)
at Mail.main(Mail.java:51)





objPrp.put("mail.smtp.host","smtp.mail.yahoo.co.jp");
tp.connect("smtp.mail.yahoo.co.jp" , "ユーザ名" , "パスワード");
などは必要に応じて社内の設定にして送信元、送信先アドレスも変更はしています。

最後に環境はXP、j2sdk1.4.2_06、tomcat-4.1.31です!
よろしくお願いします。
大変申し訳ないです。

自分の勘違いでtp.connect("smtp.mail.yahoo.co.jp" , "ユーザ名" , "パスワード");のユーザ名の指定が間違ってました!

修正を行って送信処理をしたところ解決いたしました!
皆さん、本当にありがとうございました(^^)

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Java質問&情報提供サイト 更新情報

Java質問&情報提供サイトのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング