• ベストアンサー

javaを使ってメールがしたい

JAVAを使えば、Outlookを使わなくても、メールを送付できると書いてあったのですが nested exception is: class javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25; というエラーが出て送付できません。 JavaMailの環境は何とか用意できたのですが送ることができません。 いったいどうすればよいのでしょうか? なお、コードは、下記のコピーです。 http://www.hellohiro.com/src/HelloWorldJavaMail.java 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • gimmick
  • ベストアンサー率49% (134/270)
回答No.5

変数名を間違えていました。 transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); としてください。

mizuki_ff
質問者

お礼

ありがとうございます!!!! 無事解決いたしました。

その他の回答 (4)

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.4

>// 送信します >Transport.send(mimeMessage); >//transport.sendMessage(mimeMessage, message.getAllRecipients()); のコードをTransport#sendMessage()の方に変えてください。 Transport#send()は自動的にサーバに接続してくれますが、ユーザとパスワードを指定できません。 AuthenticationFailedException(=認証エラー)となっているのはそのためです。 Transport#sendMessage()をコメントアウトしているのは何か理由があるのでしょうか?

mizuki_ff
質問者

補足

回答いただきありがとうございます。 transport.sendMessage(mimeMessage, message.getAllRecipients()); だと、 message は未定義な変数またはクラス名です。 とうエラーを出していたためです。 今は、messageをMessageにして見るとうまくいったようです。 しかし、下記のように書き換えたのですがまだ、エラーが出ます。なぜでしょうか?また、どうすればよいでしょうか?? Test.java:54: class javax.mail.Message のメソッド javax.mail.Address getAllRecipients()[] に static 参照することはできません。 transport.sendMessage(mimeMessage, Message.getAllRecipients()); // 送信します // Transport.send(mimeMessage); transport.sendMessage(mimeMessage, Message.getAllRecipients());

  • gimmick
  • ベストアンサー率49% (134/270)
回答No.3

>props.put("smtp.mail.yahoo.co.jp", "202.93.93.190");を指定していますが、同様のエラーがでます。 それではエラーになるでしょうね。上記のコードを props.put("mail.smtp.host", "smtp.mail.yahoo.co.jp"); としてください。それから Properties props = System.getProperties(); のようにシステムプロパティを取得しているようですが、 Properties props = new Properties(); でよいと思います。(動作するけど、あまり意味がない。) また、SMTPサーバへの接続に「SMTP AUTH」や「POP before SMTP」が必要な場合は、 当然それらを実装しなければいけません。例えば、「SMTP AUTH(Login)」の場合であれば、 下記のようにTransportクラスのインスタンスを使って接続と送信を行います。 props.put("mail.smtp.auth","true"); Transport transport = session.getTransport("smtp"); transport.connect(null, "user", "password"); //ユーザとパスワードを指定する transport.sendMessage(mimeMessage, message.getAllRecipients()); transport.close();

mizuki_ff
質問者

補足

回答いただきありがとうございます。 ********** の部分は埋めることができたのですが、まだ、うまく送信できないみたいです・・・ この下記のエラーをなくすには、どうしたらよいでしょうか??? javax.mail.SendFailedException: Sending failed; nested exception is: class javax.mail.AuthenticationFailedException at javax.mail.Transport.send0(Transport.java:218) at javax.mail.Transport.send(Transport.java:80) at Test.main(Test.java:53) 何卒、宜しくお願い致します。 一応、全文、コード表示。 import java.util.*; import java.io.*; import javax.mail.*; import javax.mail.internet.*; import javax.activation.*; public class Test { public static void main(String[] args) { try { Properties props = new Properties(); // SMTPサーバーのアドレスを指定 props.put("mail.smtp.host", "**********"); Session session = Session.getDefaultInstance(props, null); MimeMessage mimeMessage = new MimeMessage(session); // 送信元メールアドレスと送信者名を指定 mimeMessage.setFrom(new InternetAddress("**********", "**********","iso-2022-jp")); // 送信先メールアドレスを指定 mimeMessage.setRecipients(Message.RecipientType.TO, "**********"); // メールのタイトルを指定 mimeMessage.setSubject("SendMailでファイル添付!" , "iso-2022-jp"); props.put("mail.smtp.auth","true"); Transport transport = session.getTransport("smtp"); transport.connect(null, "**********", "**********"); //ユーザとパスワードを指定する /** 1つ目のボディパートを作成 **/ MimeBodyPart mbp1 = new MimeBodyPart(); // メールの内容を指定 mbp1.setText("SendMailでファイルを添付します。" , "iso-2022-jp"); /** 2つ目のボディパートを作成 **/ MimeBodyPart mbp2 = new MimeBodyPart(); // 添付するファイル名を指定 FileDataSource fds = new FileDataSource("helloworld.txt"); mbp2.setDataHandler(new DataHandler(fds)); mbp2.setFileName(MimeUtility.encodeWord(fds.getName())); // 複数のボディを格納するマルチパートオブジェクトを生成 Multipart mp = new MimeMultipart(); // 1つ目のボディパートを追加 mp.addBodyPart(mbp1); // 2つ目のボディパートを追加 mp.addBodyPart(mbp2); // マルチパートオブジェクトをメッセージに設定 mimeMessage.setContent(mp); // 送信日付を指定 mimeMessage.setSentDate(new Date()); // 送信します Transport.send(mimeMessage); //transport.sendMessage(mimeMessage, message.getAllRecipients()); transport.close(); } catch (Exception e) { e.printStackTrace(); } } }

  • -__-
  • ベストアンサー率21% (20/95)
回答No.2

話に趣旨がずれていますが・・・ JAVAでチャットするのがおすすめです。 CGIチャットよりも早く軽くおすすめです。 無料でレンタルできますので、一度試してみてはどうでしょう?

  • on-san
  • ベストアンサー率47% (8/17)
回答No.1

java.mail の簡単なサンプルですね。 SMTPサーバーが localhost つまりあなたのPCで起動していないので、アプリケーションがサーバーに接続できないエラーです。 あなたの普段使用しているSMTPサーバーを指定するか、あなたのPCでSMTPサーバーを設定してください。 といってもSMTPサーバーを設定するよりもいつも使用しているSMTPサーバーを指定したほうが簡単ですね。 SMTPサーバーはメール送信用のサーバーです。SMTPはデフォルトでTCPの25番ポートを使用します。

mizuki_ff
質問者

補足

回答いただきありがとうございます。 私の場合、ヤフーのフリーメールをSMTPとして使っているので、 props.put("smtp.mail.yahoo.co.jp", "202.93.93.190");を指定していますが、同様のエラーがでます。 他にも、自分のプロバイダメールでも試したのですが同様の結果でした。 パスワードの設定などする項目がないのも気になりますし、何か、大事な設定が抜けている気がするのですが、残念ながら、私には特定できていません。 ご教示、宜しくお願い致します。

関連するQ&A