• ベストアンサー

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 宜しくお願い致します。

  • Java
  • 回答数5
  • ありがとう数6

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

  • ベストアンサー
  • 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

  • JavaMailでのメール送信

    JavaMail でメールを送信しようとしていますが、うまく送信できません。 SMTPサーバはユーザ認証とPOP before SMTP です。 コードの一部を抜粋しますと Session session = Session.getDefaultInstance(props, null); Store store = session.getStore("pop3"); store.connect(host, user, pass); MimeMessage message = new MimeMessage(session); --途中省略-- Transport transport = session.getTransport("smtp"); transport.connect(null, user, pass); transport.sendMessage(message, message.getAllRecipients()); となっています。一番下の行で以下のエラーが出ます。 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:1213) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:311) at javax.mail.Service.connect(Service.java:233) at javax.mail.Service.connect(Service.java:134) at SendMail.sendMessage(SendMail.java:346) at SendMail.main(SendMail.java:162) Java初心者ですが、どうかよろしくお願いいたします。

  • Javamailで困っています。

    開発環境(Eclipse+tomcat)でJavamailが正常に実行出来、メールが送れるのですが、 実行環境(tomcat7を使用してのWebアプリケーション上)ではmailが送れないです。 【バージョン】 tomcat7 mail1.4.4 jdk1.7 Windows7(開発環境、実行環境共に) 【エラー内容】 javax.mail.MessagingException: Could not connect to SMTP host: smtp.xxx.co.jp, port: 25; nested exception is: java.net.SocketException: Permission denied: connect at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1934) at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:638) at javax.mail.Service.connect(Service.java:317) at javax.mail.Service.connect(Service.java:176) at javax.mail.Service.connect(Service.java:125) at javax.mail.Transport.send0(Transport.java:194) at javax.mail.Transport.send(Transport.java:124) OracleのページでJDK7の場合はIPv4を使う様にすると書いてあったので、 tomcat起動時にjavaオプションを追加していますが、それでもmailが送れません。 -Djava.net.preferIPv4Stack=true 参考URL:http://www.oracle.com/technetwork/java/javamail/faq-135477.html#ipv6perm 開発環境では問題ないので、ソースに不備はないと考えているのですが、 どなたか同じ様なケースになって解決された方いませんでしょうか? ご教授宜しくお願い致します。

  • [Android+Javamail]送信できません

     こんにちは  Javamailを使ってAndroid用メールアプリの開発を志しているものです。  以下のサイトを参考にさせてもらってコードを作ってエミュレーターで動かしてみました。 http://yamato-iphone.blogspot.jp/2011/12/javamail.html http://d.hatena.ne.jp/ttshrk/20110517/1305641955 http://yaim.blogzine.jp/ability/2012/04/javamail_androi.html  ところが、下記のようなエラーで、メール送信ができませんでした。 12-23 10:56:36.225: W/System.err(541): javax.mail.MessagingException: Could not connect to SMTP host: smtp.hogehoge.jp, port: 587; 12-23 10:56:36.225: W/System.err(541): nested exception is: 12-23 10:56:36.235: W/System.err(541): javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: ssl=0x199c48: Failure in SSL library, usually a protocol error 12-23 10:56:36.235: W/System.err(541): error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol (external/openssl/ssl/s23_clnt.c:683 0x401e0c93:0x00000000)  また、 12-23 10:56:35.385: I/System.out(541): DEBUG: not loading file: /system/lib/javamail.providers 12-23 10:56:35.385: I/System.out(541): DEBUG: java.io.FileNotFoundException: /system/lib/javamail.providers: open failed: ENOENT (No such file or directory)  このようなログも吐き出されており、なにか足りないものがあるようなのですが…  単純なサンプルアプリなどは普通に動作していますので、開発環境にとりあえず不備はないと思います。  Javamail用の3つのファイルもビルドパスに加えてあります。  その他にも追加すべきライブラリがあるのでしょうか?  これだけの情報では、ご回答いただくのは難しいのかも知れませんが…  よろしくお願いいたします。

  • JavaMail smtp.mail.yahoo.co.jp

    お世話になります。 JavaMail1.4を用いて、 自作プログラム内でメール送信を行おうとしているのですが、 エラーが返ってきてしまいます。 以下エラー内容です。 DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.mail.yahoo.co.jp", port 25, isSSL false javax.mail.MessagingException: Could not connect to SMTP host: smtp.mail.yahoo.co.jp, port: 25; nested exception is: java.net.ConnectException: Connection timed out: 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:258) 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 partsPackage.MailTransfer.send(MailTransfer.java:135) at partsPackage.Tester.main(Tester.java:14) 設定が悪いのか、 サーバーの指定等が悪いのか検討が付かない状況です。 ソースは final String username = "○○○○"; final String password = "○○○○"; final String from_name = "○○○○"; final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory"; Session session = null; MimeMessage mimeMessage = null; String charset = "UTF8"; String sendTo = null; String title = null; String contents = null; public MailTransfer(){} public MailTransfer(String charset){this.charset=charset;} boolean isConnected(){return session!=null;} public boolean hasMessage(){return mimeMessage!=null;} public boolean hasDestination(){return sendTo!=null;} public boolean hasTitle(){return title!=null;} public boolean hasText(){return contents!=null;} void connect(){ Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider()); Properties props = System.getProperties(); props.setProperty("mail.smtp.host", "smtp.mail.yahoo.co.jp"); props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY); props.setProperty("mail.smtp.socketFactory.fallback", "false"); props.setProperty("mail.smtp.port", "25"); props.setProperty("mail.smtp.socketFactory.port", "25"); props.put("mail.smtp.auth", "true"); props.put("mail.debug", "true"); session = Session.getInstance(props, new Authenticator(){ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); } }); } public void create_mail(){ System.out.println("送信メール作成"); if(!isConnected())connect(); if(hasMessage())return; mimeMessage=new MimeMessage(session); try { // 送信元メールアドレスと送信者名を指定 mimeMessage.setFrom(new InternetAddress(username+"@yahoo.co.jp",from_name,charset)); // メールの形式を指定 mimeMessage.setHeader("Content-Type","text/html"); } catch (Exception e) { e.printStackTrace(); } System.out.println("送信メール作成完了"); } よろしくお願い致します。

  • JAVAを使ったメール送信が時々失敗します

    http://oshiete1.goo.ne.jp/kotaeru.php3?q=1091837 でお世話になったmizukiです。 おかげさまで、JAVAを使って、添付ファイルも送信できるようになったのですが、 時々下記エラーが出ます。このエラーが出ると、メールが送信できていません。 プログラムは http://www.hellohiro.com/src/HelloWorldJavaMail.java や前回教えていただいた回答の、No,3の補足説明を少し改良しただけの、 ほとんど同じものを利用しています。 分かる方教えて下さい。よろしくお願いいたします。 javax.mail.MessagingException: [EOF] at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020) at com.sun.mail.smtp.SMTPTransport.finishData(SMTPTransport.java:942) at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:391) at email.Email.eMail(Email.java:63) at Test.main(Test.java:112)

    • ベストアンサー
    • Java
  • javamailで送信エラー?

    お世話になります、javaMailにてメール送信システムを 構築したのですが、以下のエラーが出てしまって送信できません Sending failed;nested exception is: javax.mail.SendFailedException: InvalidAddresses; nested exception is: javax.mail.SendFailedException: 550Relay restricted SMTPHOST名やメールアドレスが違う等のエラーとは違っていると思うのですが(550Relay restrictedのあたりが) どのような現象なのでしょうか? お知恵をお貸しください。 宜しくお願いします。

  • JavaサーブレットでのGmail送信プログラム

    Javaサーブレットでメールを送信したいと思い、こちら(http://www.utilz.jp/wiki/JavaMail1)のサイトで公開されているソースコードを利用してプログラムを作成したのですがエラーが発生してしまいました。 公開されているプログラムだけで実行した際には動いたので動作環境に問題は無いと思います。 public class send_Gmail extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, MessagingException { send( "*********", // gmail アカウント "*********", // gmail パスワード "*********", // 送信先 "subject", // サブジェクト "body"); // 本文 // コンテンツタイプの設定 response.setContentType("text/html;charset=Windows-31J"); // 出力のためのPrintWriterオブジェクトを取得 PrintWriter out = response.getWriter(); // 一連のコンテンツを出力 out.println("<html><head>"); out.println("<title>スクリプトレット</title>"); out.println("</head><body>"); out.println("メールを送信しました<br />"); out.println("</body></html>"); } private static final Properties PROP; static { PROP = new Properties(); PROP.put("mail.smtp.host", "smtp.gmail.com"); PROP.put("mail.smtp.port", "587"); PROP.put("mail.smtp.auth", "true"); PROP.put("mail.smtp.starttls.enable", "true"); } public void send( String user, String password, String to, String subject, String body) throws MessagingException { Transport transport = null; try { Session sess = Session.getInstance(PROP); MimeMessage mm = new MimeMessage(sess); mm.setFrom(new InternetAddress(user)); mm.setSubject(subject); mm.setRecipient( Message.RecipientType.TO, new InternetAddress(to)); mm.setContent(body, "text/plain; charset=iso-2022-jp"); mm.setHeader("Content-Transfer-Encoding", "7bit"); transport = sess.getTransport("smtp"); transport.connect(user, password); transport.sendMessage(mm, mm.getAllRecipients()); } finally { if (transport != null) { transport.close(); } } } コンパイルすると send_Gmail.java:28: Gmail_test.send_Gmail のdoPost(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) は javax.servlet.http.HttpServlet の doPost(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) をオーバーライドできません。オーバーライドされたメソッドは javax.mail.MessagingException をスローしません。 protected void doPost(HttpServletRequest request, HttpServletResponse response) というエラーが出てしまいます。throwsにMessagingExceptionを記述しないと、今度は記述しろというエラーが出てしまい困っています…解決策を教えて下さい。よろしくお願いします。

    • ベストアンサー
    • Java
  • phpでメール送信

    phpでメールを送信しようとすると、 Warning: mb_send_mail() [function.mb-send-mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() というエラーが出てしまいます・・・。 何が原因なんでしょうか?Localhostの原因でしょうか?

    • 締切済み
    • PHP
  • Javaを使用して定時送信をしたい

    Javamailを用いて、プログラムを実行することでメールを送ることには成功しました。 ここからが本題なのですが、 プログラムをループさせたままにして、 Javaで時刻を指定して(何時何分、というように) メールを送信することは出来るのでしょうか。 一日につき5回程送りたいと思っています。 CalenderやDateを使用することも考えたのですが、 上手くループせず定時の送信は出来ませんでした。 ちなみに作ったものがこちらです↓ package mailSend; import java.io.IOException; import java.util.Calendar; import java.util.Date; import javax.mail.MessagingException; import javax.mail.internet.AddressException; public class MailXML { public static void main(String[] args) throws AddressException, MessagingException, IOException{ Calendar cal = Calendar.getInstance(); while(true){ int hournow = cal.get(Calendar.HOUR_OF_DAY); int minnow = cal.get(Calendar.MINUTE); System.out.println(hournow + ":"+ minnow); while(hournow == 1 && minnow == 25 ){ Mail.gatemsg(); Mail.roommsg(); break; } } } } メールの送り先と内容はいつも同じです。 ループする(1回/分)ごとに上手くhournow()とminnnow()が更新されればよいのですが…。 そもそものやり方がおかしいのか、小さな勘違いをしているだけなのかもわかりません。 どなたか解決方法をお願いします。

  • javamail ポート指定

    javamailを使ってメール送信を行いたいと思っています。 送信先のSMTPですが、ポート番号が25番ではありません。 どのように指定すればよいのでしょうか? URLNameを使うのかとも思ったのですが、マニュアルを見ても使い方が良く分からず・・・ どなたかご教授願います。 参考にしたサイト http://www.hellohiro.com/javamail.htm