用appengine开发服务器测试邮件(java)

aku*_*001 13 java email google-app-engine

我正在使用javamail从我的appengine应用程序发送邮件.它在部署中完美运行,但我无法弄清楚如何使用开发服务器执行此操作.每当我需要测试sendmail时,我都需要部署非常烦人的应用程序.

背景信息(为什么日志不起作用):

我们知道电子邮件会转到appengine开发服务器上的日志.但是,想要从开发服务器发送电子邮件的主要原因是能够测试电子邮件的格式.它看起来怎么样?需要对电子邮件模板进行更改,以使其在电子邮件客户端A,B和C中看起来很好,并且可以快速完成,而无需每次都部署到真实的默认appengine版本的麻烦.

我们不是垃圾邮件发送者.我们不是试图绕过任何类型的安全.简而言之,我们希望合法地能够在一个或多个电子邮件客户端中查看真实的实际电子邮件,然后立即进行代码更改,以便我们可以调整它们,而无需经历编辑,编译,等待5分钟的艰苦过程它可以部署,测试,重复循环.由于每个电子邮件客户端如何呈现电子邮件没有标准,因此通过尝试在许多客户端中使用某些内容来放大这一艰苦的过程.

题:

如何将Java Google App Engine开发服务器配置为从本地计算机或SMTP服务发送电子邮件,以便测试发送给真实,实际电子邮件客户端的电子邮件?

zaw*_*tut 12

从Eclipse中,选择"运行"菜单,"调试配置...",然后选择应用程序的配置.选择Arguments选项卡,然后在"VM arguments"部分中,设置VM属性,如下所示:

-Dmail.log_mail_level=WARNING -Dmail.log_mail_body=true


Fra*_*eth 6

当我使用电子邮件服务实现时,我使用了一个很酷的提示.因此,如果您也使用MimeMessage,并且只想检查消息是否按预期格式化,检查附件是否存在,HTML格式正确,图像是否正确引用等等,您可以构建整个消息,并且在调试期间您可以拥有一些代码如下:

MimeMessage msg = new MimeMessage(session);
...
if ("1".equals(System.getProperty("mail.debug"))) {
    msg.writeTo(new FileOutputStream(new File("/tmp/sentEmail.eml")));
}
Run Code Online (Sandbox Code Playgroud)

每次执行此操作时,MimeMessageinstane都将保存到emailSent.eml.您可以使用电子邮件阅读器打开此文件,并检查一切是否正常.

当然,您需要使用-Dmail.debug = 1参数执行您的应用程序.

使用此方法附加文件,文本消息和html消息的示例可能如下所示:

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import org.junit.Test;

public class MimeMessageTest {

    @Test
    public void tesstMimeMessage() throws MessagingException, FileNotFoundException, IOException {
        Session session = Session.getDefaultInstance(new Properties(), null);
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress("admin@foo.bar", "Foo Admin"));
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress("baz@foo.bar", "Baz User"));
        msg.setSubject("Subject from admin e-mail to baz user");

        // create and fill the first message part
        MimeBodyPart mbp1 = new MimeBodyPart();
        mbp1.setText("test message and so on");
        mbp1.setContent("<h1>test message and so on in HTML</h1>", "text/html");

        // create the second message part
        MimeBodyPart mbp2 = new MimeBodyPart();

        // attach the file to the message
        FileDataSource fds = new FileDataSource("/tmp/fileToBeAttached");
        mbp2.setDataHandler(new DataHandler(fds));
        mbp2.setFileName(fds.getName());

        // create the Multipart and add its parts to it
        Multipart mp = new MimeMultipart();
        mp.addBodyPart(mbp1);
        mp.addBodyPart(mbp2);

        // add the Multipart to the message
        msg.setContent(mp);

        if ("1".equals(System.getProperty("debug"))) {
            msg.writeTo(new FileOutputStream(new File("/tmp/sentEmail.eml")));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Jas*_*all 3

来自文档

当开发服务器中运行的应用程序调用邮件服务发送电子邮件时,该消息将打印到日志中。Java 开发服务器不发送电子邮件。

因此,当您打算发送邮件时,只需检查日志,并确保它显示在那里。实际上不会发送真正的邮件。