2015-01-05 31 views
5

Tôi đang cố gắng thiết lập JavaMail để gửi và nhận email bằng cách sử dụng Postfix, được cài đặt trên hộp phát triển CentOS7 của tôi. Tôi đã xác nhận rằng postfix có thể hiển thị email đã nhận bằng cách nhập MAIL=/home/root/Maildir vào thiết bị đầu cuối, sau đó quay lại và sau đó mail, liệt kê tất cả email đã nhận cho tài khoản người dùng. Nhưng khi tôi đăng nhập với tư cách là người chủ và kiểm tra để xem các email đã nhận trong số CentOS 7 terminal, không có email mới sau khi tôi chạy mã số Javamail như được mô tả bên dưới. Tôi làm cách nào để có được Javamail để gửi email smtp?JavaMail không gửi email SMTP qua postfix

Đây là lớp học của tôi:

import java.util.*; 
import javax.mail.*; 
import javax.mail.internet.*; 
import javax.activation.*; 

//Send a simple, single part, text/plain e-mail 
public class TestEmail { 

    public void send(){ 
    // SUBSTITUTE YOUR EMAIL ADDRESSES HERE! 
    String to = "[email protected]"; 
    String from = "[email protected]"; 
    // SUBSTITUTE YOUR ISP'S MAIL SERVER HERE! 
    String host = "localhost"; 

    // Create properties, get Session 
    Properties props = new Properties(); 

    //http://docs.oracle.com/javaee/6/api/javax/mail/Session.html 
    // If using static Transport.send(), 
    // need to specify which host to send it to 
    props.put("mail.smtp.host", host); 
    // To see what is going on behind the scene 
    props.put("mail.debug", "true"); 
    Session session = Session.getInstance(props); 

    try { 
     // Instantiate a message 
     Message msg = new MimeMessage(session); 

     //Set message attributes 
     msg.setFrom(new InternetAddress(from)); 
     InternetAddress[] address = {new InternetAddress(to)}; 
     msg.setRecipients(Message.RecipientType.TO, address); 
     msg.setSubject("A new record was just added."); 
     msg.setSentDate(new Date()); 

     // Set message content 
     msg.setText("This is a test of sending a " + 
        "plain text e-mail through Java.\n" + 
        "Here is line 2."); 

     //Send the message 
     Transport.send(msg); 
    } 
    catch (MessagingException mex) { 
     // Prints all nested (chained) exceptions as well 
     mex.printStackTrace(); 
    } 
} 
}//End of class 

tôi gọi là lớp như sau:

TestEmail em = new TestEmail(); 
em.send(); 

Các nhật thực console tạo ra các bản ghi sau khi mã trên được điều hành:

DEBUG: JavaMail version 1.5.0-b01 
DEBUG: successfully loaded resource: /META-INF/javamail.default.providers 
DEBUG: Tables of loaded providers 
DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle]} 
DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Oracle], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Oracle], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Oracle], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Oracle], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle]} 
DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map 
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 
DEBUG SMTP: useEhlo true, useAuth false 
DEBUG SMTP: trying to connect to host "localhost", port 25, isSSL false 
220 localhost.localdomain ESMTP Postfix 
DEBUG SMTP: connected to host "localhost", port: 25 

EHLO localhost.localdomain 
250-localhost.localdomain 
250-PIPELINING 
250-SIZE 10240000 
250-VRFY 
250-ETRN 
250-ENHANCEDSTATUSCODES 
250-8BITMIME 
250 DSN 
DEBUG SMTP: Found extension "PIPELINING", arg "" 
DEBUG SMTP: Found extension "SIZE", arg "10240000" 
DEBUG SMTP: Found extension "VRFY", arg "" 
DEBUG SMTP: Found extension "ETRN", arg "" 
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg "" 
DEBUG SMTP: Found extension "8BITMIME", arg "" 
DEBUG SMTP: Found extension "DSN", arg "" 
DEBUG SMTP: use8bit false 
MAIL FROM:<[email protected]> 
250 2.1.0 Ok 
RCPT TO:<[email protected]> 
250 2.1.5 Ok 
DEBUG SMTP: Verified Addresses 
DEBUG SMTP: [email protected] 
DATA 
354 End data with <CR><LF>.<CR><LF> 
Date: Mon, 5 Jan 2015 13:12:02 -0800 (PST) 
From: [email protected] 
To: [email protected] 
Message-ID: <[email protected]in> 
Subject: A new record was just added. 
MIME-Version: 1.0 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

This is a test of sending a plain text e-mail through Java. 
Here is line 2. 
. 
250 2.0.0 Ok: queued as DB1249A618 
QUIT 
221 2.0.0 Bye 
sessionID is: 0816C244BDBAAD890D82138DC3801962 
+1

Lưu ý rằng bạn đang sử dụng phiên bản JavaMail khá cũ và có thể muốn nâng cấp lên [phiên bản hiện tại] (https://java.net/projects/javamail/pages/Home), mặc dù tôi chắc chắn rằng không liên quan gì đến vấn đề của bạn. –

+1

@BillShannon Cảm ơn bạn! My 'pom.xml' nói rằng tôi đang sử dụng phiên bản 1.5.0, nhưng dường như tôi nên xem xét các mẫu mã mới hơn. – CodeMed

Trả lời

1

từ nhật ký Ok: queued as DB1249A618 thư được máy chủ SMTP khôi phục chính xác. vì vậy sự cố có thể là máy chủ định cấu hình sai (có thể là bộ lọc chống spam) hoặc địa chỉ thư không đúng.

Hãy xem tại đây https://serverfault.com/questions/485505/get-postfix-to-forward-roots-mail để kiểm tra cấu hình máy chủ của bạn là đúng.

+1

đây là một aswer, như có thể vấn đề tiếp sức trên Postfix, bạn cần phải hỏi tho phần bên phải. Cập nhật với một liên kết đến giải pháp có thể xảy ra (cho ubuntu, nhưng không nên khác nhau quá nhiều) – Lesto

+1

Về mặt kỹ thuật, nó là một câu trả lời! :) – alexander

Các vấn đề liên quan