dポイントプレゼントキャンペーン実施中!

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. …

宜しくお願い致します。

A 回答 (5件)

変数名を間違えていました。



transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients());

としてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/11/20 13:01

>// 送信します


>Transport.send(mimeMessage);
>//transport.sendMessage(mimeMessage, message.getAllRecipients());

のコードをTransport#sendMessage()の方に変えてください。
Transport#send()は自動的にサーバに接続してくれますが、ユーザとパスワードを指定できません。
AuthenticationFailedException(=認証エラー)となっているのはそのためです。

Transport#sendMessage()をコメントアウトしているのは何か理由があるのでしょうか?

この回答への補足

回答いただきありがとうございます。
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());

補足日時:2004/11/20 02:24
    • good
    • 0

>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();

この回答への補足

回答いただきありがとうございます。
**********
の部分は埋めることができたのですが、まだ、うまく送信できないみたいです・・・
この下記のエラーをなくすには、どうしたらよいでしょうか???
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();
}
}
}

補足日時:2004/11/20 01:38
    • good
    • 0

話に趣旨がずれていますが・・・



JAVAでチャットするのがおすすめです。
CGIチャットよりも早く軽くおすすめです。
無料でレンタルできますので、一度試してみてはどうでしょう?
    • good
    • 0

java.mail の簡単なサンプルですね。



SMTPサーバーが localhost つまりあなたのPCで起動していないので、アプリケーションがサーバーに接続できないエラーです。

あなたの普段使用しているSMTPサーバーを指定するか、あなたのPCでSMTPサーバーを設定してください。
といってもSMTPサーバーを設定するよりもいつも使用しているSMTPサーバーを指定したほうが簡単ですね。

SMTPサーバーはメール送信用のサーバーです。SMTPはデフォルトでTCPの25番ポートを使用します。

この回答への補足

回答いただきありがとうございます。
私の場合、ヤフーのフリーメールをSMTPとして使っているので、
props.put("smtp.mail.yahoo.co.jp", "202.93.93.190");を指定していますが、同様のエラーがでます。

他にも、自分のプロバイダメールでも試したのですが同様の結果でした。

パスワードの設定などする項目がないのも気になりますし、何か、大事な設定が抜けている気がするのですが、残念ながら、私には特定できていません。
ご教示、宜しくお願い致します。

補足日時:2004/11/19 23:35
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!