有效地使用Google App Engine使用PHP发送大量电子邮件?

时间:2010-08-06 14:16:43

标签: php python google-app-engine email newsletter

我目前在MediaTemple上的Grid服务器上有一个客户端网站,很快就会被移动到虚拟专用服务器。目前,它正在使用一些黑客来使用cron作业和数据库排队来欺骗他的大量电子邮件发送(以避免超过MediaTemple设置的限制)。

我们不能使用第三方解决方案(如MailChimp等),因为客户付费的价格太高(他的邮件列表中有75,000多人)。经过大量研究后,我发现使用Google App Engine作为发送大量电子邮件的基本可扩展方式是可行的选择。

他的网站目前使用PHP。我最终想要使用Python / Django,但暂时还没有...有一些我不太了解的东西...像应用程序名为'example.appspot.com'这样的东西,这可以吗是他网站上的子域名(如mailapp.example.com)?在阅读Google App Engine上的用户指南后,应用程序使用的电子邮件地址似乎是应用程序的管理员(例如admin@example.appspot.com)......那必须是那个吗?它不可能像example@example.com?

我知道发送这么多电子邮件意味着我必须在应用程序上启用结算功能。我知道我可以发送多少配额。我甚至看过这段代码可以帮助您轻松设置:http://github.com/tow/appengine-mailer

我理想地想要替换发送电子邮件的PHP代码(使用mail()等)并将其发送到Google App Engine。

有没有人成功完成这种设置?任何人都可以帮我拼写所需的步骤吗?或者提供使用这种系统的任何陷阱?

2 个答案:

答案 0 :(得分:5)

你的第一个问题:

  

让应用程序调用   'example.appspot.com',这可能是一个   他的网站上的子域名(如   mailapp.example.com)?

是的,正如the FAQ所说:

  

可以使用Google App Engine   Google Apps提供自定义域名   面向互联网的名称   申请,例如myapp.com。

     

默认情况下,部署时   Google App Engine上的服务,您的   服务将在   [您的应用程序,ID] .appspot.com访问。在   为了提供更强大的品牌   您的应用经验   可能也想要那个应用程序   可在[my-brand] .com或   万维网。[我的品牌] .com上。

     

为了设置这些品牌   访问您的服务的位置,您   必须证明您拥有该域名   命名或购买域名   通过谷歌。 Google App Engine   允许您证明您的所有权   域名并购买新域名   使用Google Apps。

你的第二个问题:

  

应用使用的电子邮件地址是   管理员在应用程序上(如   admin@example.appspot.com)...有   是那样的?它不可能是   类似于example@example.com?

当然,您可以将自己想要的Google用户ID用作应用的管理员用户。

  

我明白发出这么多   电子邮件意味着我必须启用   在应用程序上结算。一世   明白还有配额   我能发多少。

是的,每个收件人每the docs$0.0001通过电子邮件发送。邮件列表中有75,000人,每封邮件$7.50发送给所有人。根据{{​​3}},免费配额是每天通过电子邮件发送的2,000个收件人,绝对最大值为740万(此费率也有限制,即免费和最大配额每分钟邮寄多少收件人)。

  

我理想地想要替换PHP代码   它发送电子邮件的地方(使用mail()   等)并将其发送给谷歌   改为App Engine。

抱歉,无法帮助您,我使用Python运行App Engine,而不是PHP。但我听说,使用these other docs,可以在App Engine的JVM“端”运行PHP。

答案 1 :(得分:4)

您可以使用appengine for PHP以这种方式向用户发送邮件:

<?php

    require_once 'google/appengine/api/mail/Message.php';
    use google\appengine\api\mail\Message;

    $mail_options = [
        "sender" => 'you@example.com',
        "to" => $_POST['email'],
        "subject" => "Type a subject here",
        "textBody" => "Type message here",
            ];

    try {
    $message = new Message($mail_options);
    $message->send();
    } catch (InvalidArgumentException $e) {
    echo $e;
    }

?>