java - 使用java发送电子邮件而不使用JavaMail

标签 java sockets smtp

我想编写一个套接字程序来发送 SMTP 电子邮件,而不使用任何 JavaMail API。我在互联网上找到了执行此操作的代码,但它无法正常工作。 程序如下:

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@gmail.com");
send("RCPT TO: " + "my email@gmail.com");
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) 

最佳答案

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

不确定这是否有帮助,但我在一些代码示例中看到了这个语句:

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

关于java - 使用java发送电子邮件而不使用JavaMail,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9236224/

相关文章:

python - 登录凭据不适用于 Gmail SMTP

java - 类不能被实例化

java - 如何使用 Collection.sort() 对 FastUtil BigList 进行排序

Java模块通信

java - IntelliJ ApectJ 编译后编织

javascript - 一段时间后,Node JS + Socket.io 应用程序停止接收事件

android - 如何使用wifi p2p将数据从组所有者发送到客户端

c# - Socket.UseOnlyOverlappedIO?

c# - 如何使用 smtp4dev 接收电子邮件

c# - 如何从 Web.config 读取 system.net/mailSettings/smtp