- - PR -
smtpサーバーへの認証を行うクラス(メソッド)
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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 ] | ||||
|
投稿日時: 2005-10-20 16:36
書き込みにある、スタックトレースと、クラスの関係がまったくわからないんですが。
InputPassというのはどういう位置づけのクラスなんですか? 実際に処理を行っているのは MailTransferAPIというクラスのようですが、そちらはどのようなコーディングになっている のですか? | ||||
|
投稿日時: 2005-10-20 16:44
長いため削除[ メッセージ編集済み 編集者: kセイバー 編集日時 2005-10-21 15:46 ] | ||||
|
投稿日時: 2005-10-20 17:01
こんなの見つけました。
http://forum.java.sun.com/thread.jspa?threadID=585732 要するに、SMTPへの接続をブロックしているソフトウェア(上のURLの場合はVirusScan)に よってエラーが発生しているのではないか、ということです。アンチウィルスソフトや ファイアウォールを無効にして実行してみてはどうですか? | ||||
|
投稿日時: 2005-10-20 17:07
返信ありがとうございます。
ファイアフォールについてですが、会社のサーバなので、変更できません。 telnetで接続できるなら、javaでもできるかなと思ったのですが、やっぱりファイアウォールがある限り無理なんでしょうか? | ||||
|
投稿日時: 2005-10-20 22:54
telnetで接続できたとのことですが、port25でのお話ですか? もし、port25で相手先のsmtpサーバとお話ができているんであれば、javaでもできるはずだすよ。 | ||||
|
投稿日時: 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を利用してメールを送信する方法をご存知の方がいらっしゃいましたらご教授頂けないでしょうか? 以上 | ||||
|
投稿日時: 2005-10-21 14:23
http://www2s.biglobe.ne.jp/~dat/java/project/bom/episode001/
↑このあたりが参考になるでしょうか。 |