はじめまして.こんにちわ.
いまjavamailを用いて,メール送信のプログラムを書いています.
しかし,同じアドレスに送信の際に3通に1回程度エラーを返してきます.1通のみですと失敗はないのですが,複数のメールを連続で送るとエラーを返します.
エラーは以下のものになります.
javax.mail.AuthenticationFailedException
これは認証エラーのようですが,同じSMTPを使用しているので,うまく送信できていることもあることから,方法として間違えているのではなく,何か他の部分が悪さをしているのかと思っています.例えば,次のメールがclose する前に connect をかけているのかな,と考えたりしています.そのために,transport.close() が終わった段階で1秒間ほど待つようにしてみたりしたのですが,解決できませんでした.
何か原因として考えられることありましたら,教えていただけないでしょうか.お願いいたします.
また,次に今回用いている送信するクラスをつけます.呼び出す際にはこのクラスのインスタンスをつくり,送信の際にタイトルとメッセージ,添付ファイルを書き換えながら,送信用のメソッドを連続的に呼び出すことで実装しています.
なにぶんjavaはまだ触り初めて日が浅いために,他の部分にて勘違いしている部分などもありましたら,そちらのご指摘もお願いいたします.
No.1ベストアンサー
- 回答日時:
エラーの内容を見る限りでは確かに、認証関連でエラーがでていますね。
送信時のエラーに関してはSMTPサーバがAUTH認証を要求してるってことはないでしょうか?参考URLにJavaMailを利用したAUTH認証を行い送信するサンプルがありますので、一度、実装してみてはいかがでしょうか?それでもエラーがでる様であれば、singletonモデルでテストしてみるのもいいかもしれません。
参考URL:http://www.geocities.co.jp/Playtown/7799/progmem …
この回答への補足
ありがとうございます.ですが,ちょっと私の使いかたが悪いのかもしれませんが
Session session = Session.getInstance( props, new myAuth() );
の部分で型が違うとエラーが出てしまいます.ただ,デバッグモードでみてみると,connectは成功しているようですが,以下のように出力されます.
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.***.***.jp", port 25, isSSL false
220 ***.***.***.**.jp ESMTP
DEBUG SMTP: connected to host "smtp.***.***.jp", port: 25
EHLO KATANA2
250-***.***.***.***.jp
250-AUTH LOGIN PLAIN
250-PIPELINING
250 8BITMIME
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 %%%%%%%%%%%
*********
334 %%%%%%%%%%%
*********
535 authorization failed (#5.7.0)
javax.mail.AuthenticationFailedException
また参考までに,現在自分の使っているプログラムを載せます.どうぞよろしくお願いいたします.
■呼び出し側■
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class MailSendFile {
private String smtp;
private String sendfrom;
private String sendto;
private String name;
private String title;
private String filename;
private String message;
private boolean RET;
MailSendFile(){}
MailSendFile(String _smtp, String _sendfrom, String _sendto, String _name, String _title, String _filename, String _message){
smtp = _smtp;
sendfrom = _sendfrom;
sendto = _sendto;
name = _name;
title = _title;
filename = _filename;
message = _message;
}
public boolean sendFile(String user, String pass) throws MailSendFileException{
try {
Properties props = new Properties();
props.put("mail.smtp.host",smtp);
props.put("mail.smtp.auth","true");
Session session=Session.getDefaultInstance(props,null);
MimeMessage mimeMessage=new MimeMessage(session);
// 送信元メールアドレスと送信者名を指定
mimeMessage.setFrom(new InternetAddress(sendfrom,name,"iso-2022-jp"));
mimeMessage.setRecipients(Message.RecipientType.TO,sendto);
mimeMessage.setSubject(title,"iso-2022-jp");
/** 1つ目のボディパートを作成 **/
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setText(message, "iso-2022-jp");
mimeMessage.setHeader("Content-Type","text/html");
/** 2つ目のボディパートを作成 **/
MimeBodyPart mbp2 = new MimeBodyPart();
FileDataSource fds = new FileDataSource(filename);
mbp2.setDataHandler(new DataHandler(fds));
mbp2.setFileName(MimeUtility.encodeWord(fds.getName()));
// 複数のボディを格納するマルチパートオブジェクトを生成
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
mp.addBodyPart(mbp2);
// マルチパートオブジェクトをメッセージに設定
mimeMessage.setContent(mp);
// 送信日付を指定
mimeMessage.setSentDate(new Date());
// 送信
Transport transport = session.getTransport("smtp");
transport.connect(null, user, pass); //ユーザとパスワードを指定する
transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients());
transport.close();
RET = true;
} catch (Exception e) {
System.out.println(e);
RET = false;
MailSendFileException msfe = new MailSendFileException();
throw msfe;
}
return RET;
}
public void setsmtp(String _smtp){
smtp = _smtp;
}
public void setsendfrom(String _sendfrom){
sendfrom = _sendfrom;
}
public void setsendto(String _sendto){
sendto = _sendto;
}
public void setname(String _name){
name = _name;
}
public void settitle(String _title){
title = _title;
}
public void setfilename(String _filename){
filename = _filename;
}
public void setmessage(String _message){
message = _message;
}
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(メールソフト・メールサービス) PCでメールは発信について 6 2022/08/13 09:23
- その他(メールソフト・メールサービス) メールが送信できない 発信側でできる対策 3 2023/05/11 10:22
- Outlook(アウトルック) outlookの送信エラーについて 1 2022/05/13 12:04
- サーバー 接続・ログインはできているのにメールが送信できない 2 2022/06/27 15:03
- Yahoo!メール ぷららメールの送受信が出来なくなった 2 2023/07/16 11:48
- PHP どうして送信されないのでしょうか? 1 2022/12/09 05:23
- Yahoo!メール PS4の事で質問です メールアドレスを変更の際、受信出来ず困ってます 私は今までPS4のアドレスはP 1 2022/07/28 17:06
- iPhone(アイフォーン) Phoneでメール送信できていないのは? 1 2023/07/11 20:02
- 仕事術・業務効率化 頼まれてない事を自己判断でやることについて 1 2022/08/12 17:15
- その他(メールソフト・メールサービス) Thunderbird メール受信 できない時にエラーが欲しい 1 2023/05/26 15:07
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
コンパイル時にエラーが出てし...
-
シンボルが見つかりませんとい...
-
タグが閉じてないというエラー...
-
Javaの配列に関するエラーに関して
-
(急募)Java 3回間違えたら強...
-
java eclipse apache tomcat 9....
-
getParameterについて
-
for,while文とreturn
-
【ジェネリックス】コンパイル...
-
Javaプログラムのエラー
-
java クラスContext シンボルを...
-
xmlの読込エラー
-
java.lang.StackOverflowErrort...
-
S2daoのSqlファイルでのDBア...
-
精度が落ちている可能性のエラー
-
Javaのエラーについてです
-
javaw.exeプロセスが正常起動し...
-
javaのエラーに関する質問 よ...
-
eclipseで再コンパイルしたら動...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Eclipseで、プロジェクト名のと...
-
シンボルが見つかりませんとい...
-
エラー:org.springframeworkが...
-
tomcat起動時エラー
-
Javaのエラーについてです
-
タグが閉じてないというエラー...
-
コンパイル時にエラーが出てし...
-
構文エラーのやり直しについて
-
eclipseをバージョンアップした...
-
eclipseでのsvn認証エラー回避方法
-
Eclipseで次のエラー箇所にジャ...
-
JBossについて
-
JSPの表示時エラー
-
「型 ArrayList は総称ではあり...
-
Win32コンソールアプリでnamesp...
-
Eclipseの環境について
-
致命的: StandardServer.await:...
-
javaw.exeプロセスが正常起動し...
-
getParameterについて
-
JSP内でString型からint型に変...
おすすめ情報