【问题标题】:site on server A, want to send its email from server B服务器 A 上的站点,想要从服务器 B 发送其电子邮件
【发布时间】:2010-12-03 00:31:46
【问题描述】:

我有一个相当混乱的情况,我似乎想不出办法解决。

1 - 我在共享主机上维护一个实时站点,托管公司限制为每小时 250 封电子邮件(或每小时 250 次 smtp 中继)。该网站是一个约会网站,因此会生成大量电子邮件,因此经常会达到限制。

2 - 我有一个 VPS,我可以从中无限发送电子邮件。

我想使用 2 为 1 发送电子邮件。显而易见的答案是将站点移动到服务器 2,但目前这不是一个选项。

两种设置都是 php/mysql。

提前致谢。

【问题讨论】:

    标签: php email sendmail


    【解决方案1】:

    你能配置服务器 2 吗?如果是这样,您可以将其设置为中继服务器 1 的消息吗?如果可以,那么您只需将 server1 php 脚本指向使用 host2 而不是 localhost 进行 SMTP 发送。

    如果您无法按照上述方式进行配置,您可以在 server2 上构建一个页面,server1 将要发送的电子邮件发布到该页面,然后从 server2 发送...所以,在 server2 上,您将拥有“relay.php”,其中包含表示要发送的电子邮件的发布值(addressFrom、addressTo、subject、body)。您将在 server1 上使用 curl 向 relay.php 发出 post 请求。它丑陋,性能可能不太好,不如使用 SMTP,但它会做你想做的事。理想情况下,考虑让 server2 接受来自 server1 的 SMTP 中继 - 您的主机可能会帮助您。

    【讨论】:

    • 您好,250 个限制也适用于 smtp 中继。我会检查 curl 选项谢谢。
    【解决方案2】:

    在 VPS 上设置一个 PHP 脚本,使用隐藏的 url,将其 POST 请求转换为电子邮件。

    这不是最安全的选择(实际上,根本不安全)。如果您关心安全性(并且应该),请尝试在两者之间设置一个 ssh 隧道并通过它传输消息。

    【讨论】:

      【解决方案3】:

      安全注意事项

      • Host 2 应该有 SSL(因为你有 VPS,这可以而且可能已经启用)。否则来自共享主机的其他用户可能会嗅探数据包,因为如果主机2 它将以纯文本形式发送。您应该仔细查看您的邮件日志。

      解决方案 A

      1. 当您想从 1 to 21 to 2 创建一个asynchronous request(如果需要)。当您进行异步请求时,用户不必等待发送电子邮件。例如,您可以使用 snippet 来实现这一目标。 url 2 应该是一个难以猜测的 url,作为某种安全度量(基本)。例如https://www.myvps.com/gfgfdgfdgfcascxzsdadf3rfdfvs3fd(只是一些随机字符串)。

      2. 来自url 2只需获取帖子字段并发送电子邮件。我想这是一个非常简单的解决方案。

      优点:

      • 实施简单

      缺点:

      • 可能存在缩放问题。每次调用url 2 都会产生一个新进程,并且无法限制发送电子邮件。我认为对于您的用例,您不会碰壁。
      • 如果 host 2 没有 SSL,您的系统可能不安全。

      解决方案 B:

      您可以使用 Google App Engine(GAE) 发送电子邮件。前 1000 封邮件是免费的,之后每封电子邮件将花费您 0.0001 美元。

      优点:

      • 易于实现(Python 是非常漂亮的语言)。也不需要异步请求,因为 GAE 的邮件是异步的。
      • GAE 支持SSL,因此无法嗅探来自server 1 的连接。
      • 它可以扩展,因为它在 GAE 上。

      缺点:

      • 发送电子邮件会花钱。也许你可以放弃你的 VPS 并转而使用 GAE(省钱?)。

      解决方案 C:

      此解决方案需要您安装 node.js 环境(但因为您使用的是 VPS,所以这应该不是问题)。 node.js 需要 python(>=2.4) 来安装 node.js。

      优点:

      • 快得离谱。我什至认为你不需要节流。
      • 易于实现(node.js/javascript 非常好)。再次不需要异步请求,因为 node.js 是异步的。
      • (轻松)扩展,因为您几乎可以毫不费力地进行节流。

      缺点:

      • 具有依赖项(node.js)。还有一些节点包(express、connect、node-email)
      • 如果没有 SSL,可能不安全。

      代码

      我只用了几分钟就在 node 中编写了一个电子邮件服务。

      const PORT = 4000;
      const HOST = 'localhost';
      
      const lib = require('email');
      lib.from = ''; // #Should set this to e-mail you want to sent from.
      const Email = lib.Email;
      const express = require('express');
      
      var app = module.exports = express.createServer(
            express.bodyDecoder()
      );
      
      app.post('/secret', function(req, res, params) {
          var to = req.body.to;
          var subject = req.body.subject;
          var body = req.body.body;
      
          if (!(to && subject && body)) {
              return res.send('param missing');
          }
      
          res.send('+ok');
      
          var mail = new Email({
              to: to,
              subject: subject, 
              body: body
          });
      
          mail.send(function(err){
              if (err) console.log(err);
          });
      });
      
      if (!module.parent) {
          app.listen(PORT, HOST);
          console.log("Express server listening on port %d", app.address().port)
      }
      

      【讨论】:

      • Alfred 感谢一百万的详细回复,我现在正在寻找并尝试所有选项,并将更新我最终使用的选项。再次感谢。
      • @Buzz 欢迎您。稍后我还将尝试包含更多的 sn-ps:P
      猜你喜欢
      • 1970-01-01
      • 2015-09-10
      • 1970-01-01
      • 2014-08-12
      • 2015-05-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多