Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用Greenmail作为开发smtp服务器_Java_Smtp_Jakarta Mail_Greenmail - Fatal编程技术网

Java 使用Greenmail作为开发smtp服务器

Java 使用Greenmail作为开发smtp服务器,java,smtp,jakarta-mail,greenmail,Java,Smtp,Jakarta Mail,Greenmail,我使用greenmail作为开发邮件服务器。我的用例是1)在邮件服务器上发送电子邮件,2)另一个进程将使用IMAP继续查找邮件服务器,并通知是否有任何新的电子邮件 要实现第一步,请发送电子邮件 我使用Greenmail的以下命令设置smtp服务器 java -Dgreenmail.setup.test.all -Dgreenmail.users=test1:pwd1,test2:pwd2@example.com \ -jar greenmail-standalone.jar 现在,当

我使用greenmail作为开发邮件服务器。我的用例是1)在邮件服务器上发送电子邮件,2)另一个进程将使用IMAP继续查找邮件服务器,并通知是否有任何新的电子邮件

要实现第一步,请发送电子邮件 我使用Greenmail的以下命令设置smtp服务器

java -Dgreenmail.setup.test.all -Dgreenmail.users=test1:pwd1,test2:pwd2@example.com \
     -jar greenmail-standalone.jar
现在,当我使用java的普通API使用SMTP发送电子邮件时。它说电子邮件发送成功,但我在发送电子邮件的“收件人”地址上没有收到任何电子邮件。下面是发送电子邮件的源代码

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) 我们真的可以用绿色邮件发送电子邮件吗

这是我的调试输出

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
调试:JavaMail版本1.4.7 调试:已成功加载资源:/META-INF/javamail.default.providers 调试:加载的提供程序的表 调试:按类名列出的提供程序:{com.sun.mail.smtp.smtpsslttransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.smtpsslttransport,Oracle],com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtps,Oracle],com.sun.mail.imap.imapssltore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Oracle],com.sun.mail.pop3.pop3ssstore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3ssstore,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,Oracle]] 调试:按协议列出的提供程序:{imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.imapssltore,Oracle],imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.Oracle],smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtpsslttransport,Oracle],pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3,Oracle],pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.pop3sslsstore,Oracle],smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.SMTPTransport,Oracle]} 调试:已成功加载资源:/META-INF/javamail.default.address.map 调试:getProvider()返回javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Oracle] 调试SMTP:useEhlo true,useAuth true 调试SMTP:useEhlo true,useAuth true 调试SMTP:尝试连接到主机“localhost”,端口3025,isSSL false 220/127.0.0.1绿色邮件SMTP服务v1.6.0-快照就绪 调试SMTP:已连接到主机“localhost”,端口:3025 EHLO 127.0.0.1 250 /127.0.0.1 调试SMTP:use8bit false 邮寄地址: 250行 RCPT至: 250行 调试SMTP:已验证的地址 调试SMTP:abcd@gmail.com 资料 354开始邮件输入;以结束。 发件人:test1@localhost 致:abcd@gmail.com 消息ID: 主题:来自我的绿色邮件的电子邮件 MIME版本:1.0 内容类型:文本/普通;字符集=美国ascii 内容传输编码:7bit 从我的绿色邮件发送的测试邮件!! . 250行 退出 221/127.0.0.1服务关闭传输通道 已成功从greenmail发送电子邮件 虽然上面说一切正常,状态为250 OK,但我没有收到电子邮件

问候
Maulik

我发现我的代码有问题

问题是我的IMAP阅读器代码中的toAddress。我使用了错误的登录id和密码来访问localhost帐户

一旦我修复了它,我也开始在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是否有任何类型的日志文件、调试输出或详细模式?老实说,我不知道如何查看日志。我试图查看是否有任何配置来启用日志并查看它,但我找不到任何配置。你在哪里找到的?真的,没有那么难找到。向下滚动一半以查看选项在
-Dgreenmail.verbose
上尝试该操作和JavaMail调试输出。这是我在日志
debug smtp.SmtpServer |处理新的客户端连接smtp:127.0.0.1:3025我认为,greenmail实际上并没有将电子邮件发送到收件人地址,当我们执行
传输时,可能只是返回成功。发送
主要目的是用于JUnit测试