问题描述
我正在从我的 Java 应用程序向 Gmail 帐户发送邮件.我使用了 Java Mail API,它运行良好.但是是否可以不使用 java 中的邮件 API 来发送电子邮件?
I am sending mail from my Java app to Gmail Account. I had used the Java Mail API and it worked fine. But is it possible to send an e-mail without using the mail API in java?
我的意思是使用套接字:
I mean just by using sockets:
public class Main { public static void main(String[] args) throws Exception { String host = "smtp.gmail.com"; int port = 465; String from = "sh2rpzain@gmail.com"; String toAddr = "sharpzian@gmail.com"; Socket servSocket = new Socket(host, port); DataOutputStream os = new DataOutputStream(servSocket.getOutputStream()); DataInputStream is = new DataInputStream(servSocket.getInputStream()); if (servSocket != null && os != null && is != null) { os.writeBytes("HELO "); os.writeBytes("MAIL From:" + from + " "); os.writeBytes("RCPT To:" + toAddr + " "); os.writeBytes("DATA "); os.writeBytes("X-Mailer: Java "); os.writeBytes("DATE: " + DateFormat.getDateInstance(DateFormat.FULL, Locale.US).format(new Date()) + " "); os.writeBytes("From:" + from + " "); os.writeBytes("To:" + toAddr + " "); } os.writeBytes("Subject: "); os.writeBytes("body "); os.writeBytes(" . "); os.writeBytes("QUIT "); String responseline; while ((responseline = is.readUTF()) != null) { if (responseline.indexOf("Ok") != -1) break; } } }
但它不工作,它不发送邮件.谁能告诉我可能是什么问题?
But it is not working, it doesn't send out the mail. Can anyone tell me what could be the problem?
推荐答案
这是一个很好的例子:
public class **TPDemo { public static void main(String args[]) throws IOException, UnknownHostException { String msgFile = "file.txt"; String from = "java2s@java2s.com"; String to = "yourEmail@yourServer.com"; String mailHost = "yourHost"; **TP mail = new **TP(mailHost); if (mail != null) { if (mail.send(new FileReader(msgFile), from, to)) { System.out.println("Mail sent."); } else { System.out.println("Connect to **TP server failed!"); } } System.out.println("Done."); } static class **TP { private final static int **TP_PORT = 25; InetAddress mailHost; InetAddress localhost; BufferedReader in; PrintWriter out; public **TP(String host) throws UnknownHostException { mailHost = InetAddress.getByName(host); localhost = InetAddress.getLocalHost(); System.out.println("mailhost = " + mailHost); System.out.println("localhost= " + localhost); System.out.println("**TP constructor done "); } public boolean send(FileReader msgFileReader, String from, String to) throws IOException { Socket smtpPipe; InputStream inn; OutputStream outt; BufferedReader msg; msg = new BufferedReader(msgFileReader); smtpPipe = new Socket(mailHost, **TP_PORT); if (smtpPipe == null) { return false; } inn = smtpPipe.getInputStream(); outt = smtpPipe.getOutputStream(); in = new BufferedReader(new InputStreamReader(inn)); out = new PrintWriter(new OutputStreamWriter(outt), true); if (inn == null || outt == null) { System.out.println("Failed to open streams to socket."); return false; } String initialID = in.readLine(); System.out.println(initialID); System.out.println("HELO " + localhost.getHostName()); out.println("HELO " + localhost.getHostName()); String welcome = in.readLine(); System.out.println(welcome); System.out.println("MAIL From:<" + from + ">"); out.println("MAIL From:<" + from + ">"); String senderOK = in.readLine(); System.out.println(senderOK); System.out.println("RCPT TO:<" + to + ">"); out.println("RCPT TO:<" + to + ">"); String recipientOK = in.readLine(); System.out.println(recipientOK); System.out.println("DATA"); out.println("DATA"); String line; while ((line = msg.readLine()) != null) { out.println(line); } System.out.println("."); out.println("."); String acceptedOK = in.readLine(); System.out.println(acceptedOK); System.out.println("QUIT"); out.println("QUIT"); return true; } } }
-> http://www.java2s.com/Code/Java/网络协议/SendingMailUsingSockets.htm