2012-03-23 17 views
1

私はJavaを使用して独自のSMTPサーバーを使用して電子メールを送信するシナリオを持っています。私はTomcat 6にデプロイされたアプリケーションを持っています。メールはPerlから送信されますが、Javaでは送信されません。

  1. Gmailを使用すると、電子メールを送信する機能が動作します。
  2. 独自のサーバーを使用しようとすると機能しません。

私はこの問題は、すべてがPerlのスクリプトから同じ資格情報と設定パラメータを使用して正常に動作していることである

MailException occured while sending emailMail server connection failed; nested exception is javax.mail.MessagingException: Could not connect to SMTP host: 172.16.16.1, port: 25; 
    nested exception is: 
    java.net.ConnectException: Connection timed out. Failed messages: javax.mail.MessagingException: Could not connect to SMTP host: 172.16.16.1, port: 25; 
    nested exception is: 
    java.net.ConnectException: Connection timed out 

次のエラーを取得します。

私はDebainシステムを利用しています。

私には何らかの種類のアクセス権の問題が疑わしいです。私はLinuxには新しく、知識は限られています。

誰でもお手伝いできますか?参照

#!/usr/bin/env perl 

# System Modules 
use strict; 
use warnings; 
use Mail::Sender; 

my $subject = q/Testing Mail Server./; 
my $smtp = q/localhost/; 
my $from = 'Test <[email protected]>'; 
my $to = '[email protected]'; 
my $msg = q/Hi Testing.../; 
my $auth = q{}; 
my $authid = q{}; 
my $authpwd = q{}; 

eval { 
    sendmail($smtp, $from, $to, q{}, $subject, $msg, $auth, $authid, $authpwd); 
}; 
if ([email protected]) { 
    print STDERR "Confirmation Mail Sending to $to Failed.\n"; 
    print STDERR 'ERROR: ' . [email protected]; 
} 

sub sendmail { 
    my ($smtp, $from, $to, $bcc, $subject, $msg, $auth, $authid, $authpwd) = @_; 
    my $sender = new Mail::Sender { smtp => $smtp, from => $from }; 
    $sender->Body(0, 0, 'text/html'); 
    my $result = $sender->MailMsg(
     { 
      replyto => '[email protected]', 
      to  => $to, 
      bcc  => $bcc, 
      subject => $subject, 
      msg  => $msg, 
      auth  => $auth, 
      authid => $from, 
      authpwd => $authpwd, 
     } 
    ); 
    if ($result < 0) { 
     die "$Mail::Sender::Error\n"; 
    } 
} 

答えて

1

あなたはとてもJava VMは、メールサーバーに接続できないjava.net.ConnectExceptionを取得しているため、以下のPerlスクリプトを貼り付けたPerl SCRIPT

。 Javaがメールサーバーを見ることができないので、実際にはメールの問題ではありません。

あなたは言う:

すべては、Perlスクリプトから同じ資格情報と設定パラメータを使用して正常に動作します。

PerlスクリプトはJavaと同じシステムで実行されていますか?そうでなければ、Javaホストとメールサーバーの間のネットワーク接続の問題のように見えます。

Perlスクリプトが同じシステム上で実行されている場合は、スクリプトはおそらくnetstatコマンドのようなものを使用して、あなたが思っていることを実行しています。サーバに複数のネットワークインタフェースチェックがある場合、Java VMはメールサーバに接続できないものにバインドされません。

更新 - あなたのPerlスクリプトは、メールを送信する172.16.16.1でメールサーバーを使用してではありません。あなたはこのラインから見ることができます:スクリプトはスクリプトと同じホスト上で実行されているメールサーバを経由してメールを送信している

my $smtp = q/localhost/; 

こと。

ネットワークの問題のようです。あなたはよネットワーク接続を持っていない場合

$ telnet smtp.gmail.com 25 
Trying 173.194.67.109... 
Connected to gmail-smtp-msa.l.google.com. 
Escape character is '^]'. 
220 mx.google.com ESMTP fw5sm12835658wib.0 

:あなたはあなたのようなものが表示されますポート25上のメールサーバーへのネットワーク接続を使用している場合

telnet 172.16.16.1 25 

次のコマンドを実行してみてくださいあなたは接続性を持っている場合は、iptablesルールおそらく、接続からJVMを防止、ローカルシステム上で何かがなければならない

$ telnet 172.16.16.1 25 
Trying 172.16.16.1... 
telnet: connect to address 172.16.16.1: Operation timed out 
telnet: Unable to connect to remote host 

:このような何かを参照してください。たとえば、ネットワーク接続はユーザーIDによって制限される可能性があります。 PerlスクリプトをTomcatと同じユーザーとして実行していますか?

+0

PerlスクリプトはTomcatと同じマシンにあります。実際、Tomcatと同じディレクトリにあります。 –

+0

Perlスクリプトは実際にはとてもシンプルですが、参考のために質問に追加しました。 –

+0

@SB。 - 私が示唆したように、このスクリプトはあなたが思っていることをしていません。 –

0

javamailを使用するようにtomcatサーバーを正しく設定しましたか?

私はcontext.xmlにResourceを、web.xmlにresource-refを設定する必要があると思います。

手順については、この記事をチェックアウト:

http://haveacafe.wordpress.com/2008/09/26/113/

+0

私はそれがGmailとうまく動作するので、必要な資格情報が提供されているので、どんなSMTPでも動作するはずです。 –

0

問題は簡単だった、何とかそれはPerlスクリプトは、空のAUTHパラメータ

my $auth = q{}; 
my $authid = q{}; 
my $authpwd = q{}; 

を送信しているとして、それがあることを私たちに起こったことはありません電子メールを送信するためにSMTPが認証を必要としない可能性があります。

Javaプログラムでは、ユーザー名とパスワードをBLANKに設定していたため、Javaプログラムが失敗していました。 mail.smtp.authをfalseに設定して認証を無効にすると、うまくいきました。

このプラクティスは、内部SMTPサーバーから電子メールを送信する際に認証を使用しないことがどれほど良いか悪いかわかりません。

ありがとうございました。

ありがとう、

シャルダール。

関連する問題