使用 Greenmail 作为开发 smtp 服务器
Using Greenmail as a devlopment smtp server
我正在使用 greenmail 作为开发邮件服务器。我的用例是 1) 在邮件服务器上发送电子邮件和 2) 另一个进程将继续使用 IMAP 查找该邮件服务器并通知是否有任何新电子邮件。
实现第一步1)发邮件
我使用以下 Greenmail
命令设置 smtp 服务器
java -Dgreenmail.setup.test.all -Dgreenmail.users=test1:pwd1,test2:pwd2@example.com \
-jar greenmail-standalone.jar
现在,当我使用 java 的 API 正常使用 SMTP 发送电子邮件时。它说电子邮件发送成功,但我在发送电子邮件的 "to" 地址上没有收到任何电子邮件。下面是发送邮件的源代码
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "abcd@gmail.com";
// Sender's email ID needs to be mentioned
String from = "web@gmail.com";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties=new Properties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
props.put("mail.smtp.port", "3025"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true");
// Get the default Session object.
Authenticator auth = new Authenticator() {
//override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
你能帮我找出我做错了什么吗?
1) 我们真的可以使用 greenmail 发送电子邮件吗?
这是我的调试输出
DEBUG: JavaMail version 1.4.7
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 true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "localhost", port 3025, isSSL false
220 /127.0.0.1 GreenMail SMTP Service v1.6.0-SNAPSHOT ready
DEBUG SMTP: connected to host "localhost", port: 3025
EHLO 127.0.0.1
250 /127.0.0.1
DEBUG SMTP: use8bit false
MAIL FROM:<test1@localhost>
250 OK
RCPT TO:<abcd@gmail.com>
250 OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP: abcd@gmail.com
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: test1@localhost
To: abcd@gmail.com
Message-ID: <1296064247.0.1509389569017.JavaMail.s0065311@IRV-DU10507>
Subject: Email From my Greenmail
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Test Mail sent from My Greenmail!!
.
250 OK
QUIT
221 /127.0.0.1 Service closing transmission channel
Email sent successfully from greenmail
尽管它说一切正常并且状态为 250 OK,但我没有收到电子邮件。
问候
毛利克
我发现我的代码有问题!
问题是我的 IMAP reader 代码中的 toAddress。我使用了错误的登录 ID 和密码来访问本地主机帐户。
修复后,我也开始通过 IMAP 接收电子邮件。
下面是工作代码示例。
1) TestEmail - 在 SMTP
上发送电子邮件
public static void main(String[] args) throws Exception {
Session session;
String user = "test1";
String password = "pwd1";
String fromAddress = "test1@localhost"; // newlycreateduser@localhost
String toAddress = "test1@localhost";
// Create a mail session
Properties properties = System.getProperties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.transport.protocol.rfc822", "smtp");
properties.put("mail.smtp.host", "localhost");
properties.put("mail.smtp.port", "3025");
properties.put("mail.debug", "true");
properties.put("mail.smtp.localaddress", "127.0.0.1");
session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("test1", "pwd1");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject("Email From my Greenmail");
message.setText("Test Mail sent from My Greenmail!!");
message.addHeader("X-THALES-ID", "1");
message.addHeader("X-ROUTE-TO", "thalestest");
message.addHeader("X-GROUND-TYPE", "GROUND");
message.addHeader("X-ORIGINAL-FROM", "ambatltesttool");
message.addHeader("X-EMBATL-ERROR", "");
Transport.send(message);
System.out.println("Email sent successfully from greenmail");
} catch (MessagingException e) {
e.printStackTrace();
}
}
2) TestIMAP - 连续读取本地主机帐户以检查新电子邮件!
public static void main(String[] args) throws Exception {
Session sessionIMAP;
sessionIMAP = setupImap();
while(true) {
Store store = sessionIMAP.getStore("imap");
store.connect("localhost", 3143, "test1@localhost", "test1@localhost");
if (store.isConnected()) {
System.out.println("IMAP is connected");
Folder folder = store.getFolder("INBOX");
if (folder != null) {
folder.open(Folder.READ_ONLY);
//folder.getMessage(1);
if(folder.getMessageCount() > 0) {
System.out.println("maulik - " + folder.getMessage(1).getSubject());
}
Message[] messages = folder.getMessages();
System.out.println("maulik messages.length---" + folder.getMessageCount());
}
} else {
System.out.println("IMAP is not connected");
}
Thread.sleep(1000);
}
}
private static Session setupImap() {
System.out.println("in setupImap");
Session session1;
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
props.put("mail.imap.host", "localhost");
props.put("mail.imap.port", 3143);
props.put("mail.debug", "true");
props.put("mail.imap.localaddress", "127.0.0.1");
session1 = Session.getInstance(props, null);
return session1;
}
此致
我正在使用 greenmail 作为开发邮件服务器。我的用例是 1) 在邮件服务器上发送电子邮件和 2) 另一个进程将继续使用 IMAP 查找该邮件服务器并通知是否有任何新电子邮件。
实现第一步1)发邮件 我使用以下 Greenmail
命令设置 smtp 服务器java -Dgreenmail.setup.test.all -Dgreenmail.users=test1:pwd1,test2:pwd2@example.com \
-jar greenmail-standalone.jar
现在,当我使用 java 的 API 正常使用 SMTP 发送电子邮件时。它说电子邮件发送成功,但我在发送电子邮件的 "to" 地址上没有收到任何电子邮件。下面是发送邮件的源代码
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "abcd@gmail.com";
// Sender's email ID needs to be mentioned
String from = "web@gmail.com";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties=new Properties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
props.put("mail.smtp.port", "3025"); //TLS Port
props.put("mail.smtp.auth", "true"); //enable authentication
props.put("mail.smtp.starttls.enable", "true");
// Get the default Session object.
Authenticator auth = new Authenticator() {
//override the getPasswordAuthentication method
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(fromEmail, password);
}
};
Session session = Session.getInstance(props, auth);
try {
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
你能帮我找出我做错了什么吗? 1) 我们真的可以使用 greenmail 发送电子邮件吗?
这是我的调试输出
DEBUG: JavaMail version 1.4.7
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 true
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "localhost", port 3025, isSSL false
220 /127.0.0.1 GreenMail SMTP Service v1.6.0-SNAPSHOT ready
DEBUG SMTP: connected to host "localhost", port: 3025
EHLO 127.0.0.1
250 /127.0.0.1
DEBUG SMTP: use8bit false
MAIL FROM:<test1@localhost>
250 OK
RCPT TO:<abcd@gmail.com>
250 OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP: abcd@gmail.com
DATA
354 Start mail input; end with <CRLF>.<CRLF>
From: test1@localhost
To: abcd@gmail.com
Message-ID: <1296064247.0.1509389569017.JavaMail.s0065311@IRV-DU10507>
Subject: Email From my Greenmail
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Test Mail sent from My Greenmail!!
.
250 OK
QUIT
221 /127.0.0.1 Service closing transmission channel
Email sent successfully from greenmail
尽管它说一切正常并且状态为 250 OK,但我没有收到电子邮件。
问候 毛利克
我发现我的代码有问题!
问题是我的 IMAP reader 代码中的 toAddress。我使用了错误的登录 ID 和密码来访问本地主机帐户。
修复后,我也开始通过 IMAP 接收电子邮件。
下面是工作代码示例。
1) TestEmail - 在 SMTP
上发送电子邮件public static void main(String[] args) throws Exception {
Session session;
String user = "test1";
String password = "pwd1";
String fromAddress = "test1@localhost"; // newlycreateduser@localhost
String toAddress = "test1@localhost";
// Create a mail session
Properties properties = System.getProperties();
properties.put("mail.transport.protocol", "smtp");
properties.put("mail.transport.protocol.rfc822", "smtp");
properties.put("mail.smtp.host", "localhost");
properties.put("mail.smtp.port", "3025");
properties.put("mail.debug", "true");
properties.put("mail.smtp.localaddress", "127.0.0.1");
session = Session.getInstance(properties, new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("test1", "pwd1");
}
});
try {
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(fromAddress));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddress));
message.setSubject("Email From my Greenmail");
message.setText("Test Mail sent from My Greenmail!!");
message.addHeader("X-THALES-ID", "1");
message.addHeader("X-ROUTE-TO", "thalestest");
message.addHeader("X-GROUND-TYPE", "GROUND");
message.addHeader("X-ORIGINAL-FROM", "ambatltesttool");
message.addHeader("X-EMBATL-ERROR", "");
Transport.send(message);
System.out.println("Email sent successfully from greenmail");
} catch (MessagingException e) {
e.printStackTrace();
}
}
2) TestIMAP - 连续读取本地主机帐户以检查新电子邮件!
public static void main(String[] args) throws Exception {
Session sessionIMAP;
sessionIMAP = setupImap();
while(true) {
Store store = sessionIMAP.getStore("imap");
store.connect("localhost", 3143, "test1@localhost", "test1@localhost");
if (store.isConnected()) {
System.out.println("IMAP is connected");
Folder folder = store.getFolder("INBOX");
if (folder != null) {
folder.open(Folder.READ_ONLY);
//folder.getMessage(1);
if(folder.getMessageCount() > 0) {
System.out.println("maulik - " + folder.getMessage(1).getSubject());
}
Message[] messages = folder.getMessages();
System.out.println("maulik messages.length---" + folder.getMessageCount());
}
} else {
System.out.println("IMAP is not connected");
}
Thread.sleep(1000);
}
}
private static Session setupImap() {
System.out.println("in setupImap");
Session session1;
Properties props = new Properties();
props.setProperty("mail.store.protocol", "imap");
props.put("mail.imap.host", "localhost");
props.put("mail.imap.port", 3143);
props.put("mail.debug", "true");
props.put("mail.imap.localaddress", "127.0.0.1");
session1 = Session.getInstance(props, null);
return session1;
}
此致