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

2022-09-04 08:10:38

我正在使用javamail从我的appengine应用程序发送邮件。它在部署中可以完美地工作,但我无法弄清楚如何使用开发服务器执行此操作。每当我需要测试sendmail时,我都必须部署应用程序,这很烦人。

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

我们知道电子邮件会转到 appengine 开发服务器上的日志。但是,想要从开发服务器发送电子邮件的主要原因是能够测试电子邮件的格式。它看起来如何?是否需要对电子邮件模板进行更改,以便它在电子邮件客户端A,B和C中看起来不错,并且可以快速完成,而无需每次都部署到真实的默认应用程序引擎版本。

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

问题:

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


答案 1

从 Eclipse 中,选择“运行”菜单、“调试配置...”,然后选择应用的配置。选择“参数”选项卡,然后在“VM 参数”部分中,按如下方式设置 VM 属性:

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


答案 2

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

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

每次执行此操作时,instane 都会保存到 。您可以使用电子邮件阅读器打开此文件,并检查一切是否正常。MimeMessageemailSent.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")));
        }
    }
}

推荐