JavaMail APIを使用せずにSMTP電子メールを送信するソケットプログラムを作成したいと思います。私はそれを行うためにインターネット上のコードを見つけましたが、正しく動作しません。 ここにプログラムがあります:JavaMailなしでJavaを使用して電子メールを送信
import java.net.*;
import java.io.*;
import java.util.*;
public class SMTPTest
{ public static void main(String[] args)
{ SMTPTest smtp = new SMTPTest();
smtp.sendMail();
}
public void sendMail()
{
try
{
Socket s = new Socket("smtp.gmail.com", 465);
out = new PrintWriter(s.getOutputStream());
in = new BufferedReader(new
InputStreamReader(s.getInputStream()));
String hostName = InetAddress.getLocalHost().getHostName();
System.out.println("hostName = " + hostName);
send(null);
send("HELO " + hostName);
send("MAIL FROM: " + "my [email protected]");
send("RCPT TO: " + "my [email protected]");
send("DATA");
send("Happy SMTP Programming!!");
send("Happy SMTP Programming!!");
send(".");
send("QUIT");
s.close();
out.close();
in.close();
}
catch(IOException e)
{ e.printStackTrace();
}
}
public void send(String s) throws IOException
{ if (s != null)
{ out.println(s);
out.flush();
}
String line;
if ((line = in.readLine()) != null) //output the response
System.out.println(line);
}
private PrintWriter out;
private BufferedReader in;
}
誰でも手助けできますか?ここ は誤りです:
java.net.UnknownHostException: smtp.gmail.com
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at SMTPTest.sendMail(SMTPTest.java:19)
at SMTPTest.main(SMTPTest.java:12)
Unknow host exceptionは、Javaがインターネット接続(正確にはDNSサーバ)に到達できないことを意味します。ファイアウォールの問題? –
通常のSMTPでGoogleメールサーバーを使用することはできません - TLSが必要です。別のsmtpサーバーを使用してください。 –
gmail.comに直接送信する場合は、gmail.comのDNS MXタイプレコードを取得してから、コードを使用して接続しようとする必要があります。 Google smtpをMTAとして使用するには、SSL接続を使用する必要があります)、2)自分自身を認証する必要があります。 – Singagirl