2011-10-09 47 views
5

Tôi đang gửi thư từ ứng dụng Java của tôi tới Tài khoản Gmail. Tôi đã sử dụng Java Mail API và nó hoạt động tốt. Nhưng có thể gửi e-mail mà không sử dụng API thư trong java không?gửi thư đến tài khoản Gmail

tôi có nghĩa là chỉ bằng cách sử dụng ổ cắm:

public class Main { 
    public static void main(String[] args) throws Exception { 
    String host = "smtp.gmail.com"; 
    int port = 465; 
    String from = "[email protected]"; 
    String toAddr = "[email protected]"; 


    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\r\n"); 
     os.writeBytes("MAIL From:" + from + " \r\n"); 
     os.writeBytes("RCPT To:" + toAddr + "\r\n"); 
     os.writeBytes("DATA\r\n"); 
     os.writeBytes("X-Mailer: Java\r\n"); 
     os.writeBytes("DATE: " + DateFormat.getDateInstance(DateFormat.FULL, 
            Locale.US).format(new Date()) + "\r\n"); 
     os.writeBytes("From:" + from + "\r\n"); 
     os.writeBytes("To:" + toAddr + "\r\n"); 
    } 

    os.writeBytes("Subject:\r\n"); 
    os.writeBytes("body\r\n"); 
    os.writeBytes("\r\n.\r\n"); 
    os.writeBytes("QUIT\r\n"); 
    String responseline; 
    while ((responseline = is.readUTF()) != null) { 
     if (responseline.indexOf("Ok") != -1) 
     break; 
    } 
    } 
} 

Nhưng nó không phải đang làm việc, nó không gửi qua đường bưu điện. Bất cứ ai có thể cho tôi biết những gì có thể là vấn đề?

+1

Cố gắng đóng socket ở cuối, tôi đã có một lỗi với điều này một thời gian trước. – Sibbo

+0

Lỗi là gì? – Mob

+0

Nó không hiển thị bất kỳ lỗi nào nhưng thư không được trsnsferred – Sharpzain120

Trả lời

2

Đây là một ví dụ điển hình:

public class SMTPDemo { 

    public static void main(String args[]) throws IOException, 
     UnknownHostException { 
    String msgFile = "file.txt"; 
    String from = "[email protected]"; 
    String to = "[email protected]"; 
    String mailHost = "yourHost"; 
    SMTP mail = new SMTP(mailHost); 
    if (mail != null) { 
     if (mail.send(new FileReader(msgFile), from, to)) { 
     System.out.println("Mail sent."); 
     } else { 
     System.out.println("Connect to SMTP server failed!"); 
     } 
    } 
    System.out.println("Done."); 
    } 

    static class SMTP { 
    private final static int SMTP_PORT = 25; 

    InetAddress mailHost; 

    InetAddress localhost; 

    BufferedReader in; 

    PrintWriter out; 

    public SMTP(String host) throws UnknownHostException { 
     mailHost = InetAddress.getByName(host); 
     localhost = InetAddress.getLocalHost(); 
     System.out.println("mailhost = " + mailHost); 
     System.out.println("localhost= " + localhost); 
     System.out.println("SMTP constructor done\n"); 
    } 

    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, SMTP_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/Network-Protocol/SendingMailUsingSockets.htm

+0

logic của biến msgfile là gì? – Sharpzain120

+0

Có thông báo nằm ở đó sẽ được gửi. – MasterCassim

+0

530 5.7.0 Phải ban hành lệnh STARTTLS trước. ei16sm26532474wbb.21 – Sharpzain120

0

Nếu bạn có một IP động bạn có lẽ không có khả năng gửi tin nhắn đến Googlemail.

0

GMail không cho phép chuyển thư không an toàn. Bạn cần thực hiện kết nối SSL/TLS trong quá trình triển khai.

0

Theo mặc định, Google chỉ cho phép các kết nối được mã hóa. Đó thực sự là một điều tốt, theo ý kiến ​​của tôi.

Nhưng nếu bạn phải gửi thư trong bản rõ, bạn có thể bật nó trên Account Page trong cài đặt.

0

Để sử dụng một kết nối an toàn, sử dụng SSLSocket thay vì Socket, như thế này:

SSLSocket socket = (SSLSocket) ((SSLSocketFactory) SSLSocketFactory.getDefault()).createSocket(InetAddress.getByName("smtp.gmail.com"), 465); 
Các vấn đề liên quan