2012-02-10 26 views
1

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) 
+1

Unknow host exceptionは、Javaがインターネット接続(正確にはDNSサーバ)に到達できないことを意味します。ファイアウォールの問題? –

+1

通常のSMTPでGoogleメールサーバーを使用することはできません - TLSが必要です。別のsmtpサーバーを使用してください。 –

+0

gmail.comに直接送信する場合は、gmail.comのDNS MXタイプレコードを取得してから、コードを使用して接続しようとする必要があります。 Google smtpをMTAとして使用するには、SSL接続を使用する必要があります)、2)自分自身を認証する必要があります。 – Singagirl

答えて

0

You cannot use Google mail servers with plain SMTP - they need TLS.

ない、これは役立ちますが、私はいくつかのコード例では、この文を見てきたかどうかわから:

System.setProperty("mail.smtp.starttls.enable","true"); 
Socket s = new Socket(...); 
+1

これはここでは使用されていないJavaMailプロパティです。 http://javamail.kenai.com/nonav/javadocs/com/sun/mail/smtp/package-summary.html –

+0

ホストを次のように変更しました。 – user1178619

0

代わりにソケットの、のSSLSocketを使用して、のようなso:

SSLSocket socket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(InetAddress.getByName("smtp.gmail.com"), 465); 

あなたは例外をキャッチする必要がありますが、あなたはそのアイデアを得るでしょう。

関連する問題