1

可能重复:
如何使用 Gmail 从 Java 应用程序发送电子邮件?

如何在没有 javamail 或 javaee 的情况下使用 java(javax.net、javax.net.ssl 和 java.net)将邮件发送到 gmail smtp 服务器?可能是这样开始的:

            SSLSocketFactory sf = (SSLSocketFactory)SSLSocketFactory.getDefault();
            Socket smtpsocket = sf.createSocket();
         Socket sslsocket = sf.createSocket(smtpsocket,"smtp.gmail.com",465,true);
4

2 回答 2

2

您需要连接到 gmail 服务器公开的 SMTP 端口并启动与服务器的 SMTP 对话。此链接描述了对话:http ://slett.net/spam-filtering-for-mx/smtpintro.html 。虽然这适用于普通套接字(不需要 JavaMail 包),但您需要处理所有情况以使其达到生产质量。

于 2012-08-21T05:13:23.260 回答
2

你可以试试这个:这里有很好的文档http://www.cs.cf.ac.uk/Dave/PERL/node175.html(我收到一个套接字连接错误,但最终代码看起来或多或少相同的)

public class Mailer {
    private static BufferedReader reader;
    private static OutputStream outputStream;

    public static void main(String args[]) {
        args = new String[]{"smtp.gmail.com","my_id@gmail.com","your_id@gmail.com"};
        try {
            if (args.length == 3) {
                Socket socket = new Socket(args[0], 465);
                reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                outputStream = socket.getOutputStream();
                smtpCommand("HELO " + args[0]);
                smtpCommand("MAIL From: " + args[1]);
                smtpCommand("RCPT To: " + args[2]);
                smtpCommand("DATA");
                smtpCommand("From: " + args[1] + "\nTo: " + args[2] + "\nContent-Type:text/html;\nSubject: test\n MAIL CONTENT \n.\n");
                System.out.println("\nMessage Sent Successfully to" + args[1].substring(0, args[1].indexOf("@")));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void smtpCommand(String command) throws Exception {
        System.out.println(command);
        reader.readLine();
        outputStream.write((command + "\r\n").getBytes());
    }
}
于 2012-08-21T05:20:50.503 回答