- PR -

smtpサーバーへの認証を行うクラス(メソッド)

投稿者投稿内容
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-10-20 16:22
現在、メール送信APIを作っているのですが、どうしてもサーバに接続できません。
下記のようなエラーがでます。

javax.mail.MessagingException: Could not connect to SMTP host: *,*,*,*, port: 25;
nested exception is:
  java.net.SocketException: Software caused connection abort: connect
  at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1227)
  at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:322)
  at javax.mail.Service.connect(Service.java:236)
  at javax.mail.Service.connect(Service.java:137)
  at javax.mail.Service.connect(Service.java:86)
  at javax.mail.Transport.send0(Transport.java:150)
  at javax.mail.Transport.send(Transport.java:80)
  at classes.MailTransferAPI.sendMail(MailTransferAPI.java:252)
  at classes.MailAPITest.main(MailAPITest.java:23)
telnetではauth loginの
decode base 64 でユーザーとパスワードを打ったらログインできました

現在下記のクラスを使いログインしようとしています。

class InputPass extends Authenticator {
 protected PasswordAuthentication getPasswordAuthentication() {
  String user = "" , pass = "";
   try
   {
    System.out.print("ユーザー名を入力してください>");
    LineNumberReader in = new LineNumberReader(new InputStreamReader(System.in));
    user = in.readLine();

    System.out.print("パスワードを入力してください>");
    in = new LineNumberReader(new InputStreamReader(System.in));
    pass = in.readLine();
   }
   catch (IOException err)
   {
    System.out.println(err);
   }
    return new PasswordAuthentication(user , pass);
   }
}

いったいどんなクラス(メソッド)を使えば、ログインできるのでしょうか?
お願いします

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-10-20 16:25 ]

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-10-20 16:27 ]

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-10-20 16:28 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-20 16:36
書き込みにある、スタックトレースと、クラスの関係がまったくわからないんですが。
InputPassというのはどういう位置づけのクラスなんですか? 実際に処理を行っているのは
MailTransferAPIというクラスのようですが、そちらはどのようなコーディングになっている
のですか?
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-10-20 16:44
長いため削除

[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-10-21 15:46 ]
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2005-10-20 17:01
こんなの見つけました。

http://forum.java.sun.com/thread.jspa?threadID=585732

要するに、SMTPへの接続をブロックしているソフトウェア(上のURLの場合はVirusScan)に
よってエラーが発生しているのではないか、ということです。アンチウィルスソフトや
ファイアウォールを無効にして実行してみてはどうですか?
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-10-20 17:07
返信ありがとうございます。

ファイアフォールについてですが、会社のサーバなので、変更できません。
telnetで接続できるなら、javaでもできるかなと思ったのですが、やっぱりファイアウォールがある限り無理なんでしょうか?
ina
ベテラン
会議室デビュー日: 2005/04/14
投稿数: 58
投稿日時: 2005-10-20 22:54
引用:

telnetで接続できるなら、javaでもできるかなと思ったのですが、やっぱりファイアウォールがある限り無理なんでしょうか?



telnetで接続できたとのことですが、port25でのお話ですか?
もし、port25で相手先のsmtpサーバとお話ができているんであれば、javaでもできるはずだすよ。
kセイバー
常連さん
会議室デビュー日: 2005/10/12
投稿数: 33
投稿日時: 2005-10-21 11:55
レスありがとうございます

telnetの接続に使ったポートは25番ポートです。

かなり、私の投稿が見づらいため、内容を編集して再投稿します。

javaからE-mailを送信するプログラムを作成しています。

@itのサンプルプログラム等を参考に簡単なテストプログラムを作成しテストを行ったのですが、うまく送信できません。

以下にソースコードをまとめたものを書きます。

/*
*メールを送信しauth認証も行えるプログラム
*
*/

mport java.io.UnsupportedEncodingException;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.AddressException;
import javax.mail.internet.MimeMessage;
import javax.activation.FileDataSource;
//auth認証サーバー用
import java.io.*;
import javax.mail.*;
import javax.mail.PasswordAuthentication;

public class MyMailSend
{
 public static void main( String []args)
 throws Exception
 {
  try
  {
   String res_address="*.*.*.*";
   String fromad="*";
   String subject="題名";
   String source="本文";
   String smtpserver="*.*.*.*";
   Properties prp=new Properties();
   //smtpサーバーを指定
   prp.setProperty("mail.smtp.host",smtpserver);
   Authenticator auth = new InputPass();
   Session session=Session.getDefaultInstance(prp,auth);
   MimeMessage mimemes=new MimeMessage(session);
   InternetAddress intead=null;
   //fromをinteadにセット
   intead =new InternetAddress(fromad);
   //fromのセット
   mimemes.setFrom(intead);
   //TOのセット
   mimemes.setRecipients(Message.RecipientType.TO,res_address);
   //題名
   mimemes.setSubject(subject,"ISO-2022-jp");
   mimemes.setText(source,"ISO-2022-JP");
   //生成したmimemesを元にメールを送信
   Transport.send(mimemes);
  }
  catch (MessagingException e)
  {
   e.printStackTrace();
  }
 }
}
class InputPass extends Authenticator
{
 protected PasswordAuthentication getPasswordAuthentication() {
 String user = "*" , pass = "*";
 try
 {
  System.out.print("ユーザー名を入力してください>");
  LineNumberReader in = new LineNumberReader(new InputStreamReader(System.in));
  user = in.readLine();
  System.out.print("パスワードを入力してください>");
  in = new LineNumberReader(new InputStreamReader(System.in));
  pass = in.readLine();
 }
 catch (IOException err)
 {
  System.out.println(err);
 }
 return new PasswordAuthentication(user , pass);
 }
}

上記プログラムをテスト環境で実行すると以下のような例外がスローされます。

javax.mail.MessagingException: Could not connect to SMTP host: *.*.*.*, por
t: 25;
 nested exception is:
  java.net.SocketException: Software caused connection abort: connect
  at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1227)
  at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:32
2)
at javax.mail.Service.connect(Service.java:236)
at javax.mail.Service.connect(Service.java:137)
at javax.mail.Service.connect(Service.java:86)
at javax.mail.Transport.send0(Transport.java:150)
at javax.mail.Transport.send(Transport.java:80)
at classes.MyMailSend.main(MyMailSend.java:52)

色々調査してみたとこr、接続先SMTPサーバが「AUTH認証」という特殊な認証が必要なサーバであり、上記プログラムでは送信できないです。

つきましては、「AUTH認証」のSMTPサーバに対してJavaMailを利用してメールを送信する方法をご存知の方がいらっしゃいましたらご教授頂けないでしょうか?

以上


K
大ベテラン
会議室デビュー日: 2004/04/07
投稿数: 174
投稿日時: 2005-10-21 14:23
http://www2s.biglobe.ne.jp/~dat/java/project/bom/episode001/
↑このあたりが参考になるでしょうか。

スキルアップ/キャリアアップ(JOB@IT)