2

我在我的应用程序中设置了一些自动电子邮件任务。也就是说,我每天都会向客户发送特定于应用程序的电子邮件,以提醒他们约会等。使用 Gmail 的 smtp 是否适用于生产任务,而不仅仅是一条简单的消息?实现我自己的 smtp 服务器(例如 Apache James)有什么好处吗?

4

2 回答 2

2

Gmail TOS 禁止未经请求的商业电子邮件。一般来说,我不会向公众部署任何依赖 Gmail 的服务。我认为 Gmail 无论如何都会将电子邮件收件人列表限制为 100,因此如果您尝试将相同的邮件发送给 100 多人,它可能会失败。

通常,出于声誉原因,您需要自己的 IP 来发送邮件。对于我从事自由职业的大多数客户,我推荐负担得起的合作伙伴服务,例如http://sendgrid.com/ ...拥有自己的 IP 意味着您可以合法地管理自己作为批量电子邮件发件人的声誉。而且您不必担心 Gmail 会因为违反 TOS 而将您关闭。Gmail 也不会为您提供有关可传递性的指标,因此您不会知道您是否成功发送这些信息。

在为一家主要的电子邮件营销人员工作后,我可以告诉您,如今仅向 SMTP 服务器发送消息是不够的。所有主要的邮件服务提供商都会做一些事情,比如要求批量邮件的发件人识别密钥。他们还计量消息并标记最终在特定时间内提交过多消息的发件人。如果您希望您的邮件被递送而不是在垃圾邮件文件夹中,您需要做很多工作并启动一个带有专用 IP 的专用服务器,或者您应该使用可以为您完成部分工作的供应商。

于 2012-08-11T15:45:00.643 回答
1

我同意@Richthofen - 在生产环境中使用 gmail 发送电子邮件是一个糟糕(且不道德)的想法;Amazon SES 或 Sendgrid 是这里的最佳解决方案。如果您想运行自己的 SMTP 服务器,请记住它会与您的应用程序共享资源,并且可能会减慢它的速度。

但是,我使用 gmail 来使用 javamail API 测试开发/测试环境。这是代码:

public class EmailSender{

    public void send(){
      //javamail code
      Session mailSession = createSmtpSession();
      //javamail code
    }

    private Session createSmtpSession() {
        final Properties props = new Properties();
        props.setProperty ("mail.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.auth", "true");
        props.setProperty("mail.smtp.port", "" + 587);
        props.setProperty("mail.smtp.starttls.enable", "true");
        props.setProperty ("mail.transport.protocol", "smtp");
        // props.setProperty("mail.debug", "true");

        return Session.getDefaultInstance(props, new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                    "<gmail ID in user@domain format goes here>", 
                    "<password goes here>");
            }
        });
    }
}
于 2012-08-11T16:05:38.560 回答