сайт на сервере A, хотите отправить свою электронную почту с сервера B - PullRequest
1 голос
/ 03 декабря 2010

У меня довольно запутанная ситуация, которую я не могу придумать, как решить эту проблему.

1 - я поддерживаю действующий сайт на общем хосте, хостинговая компания имеет ограничение 250электронная почта / час (или 250 SMTP-реле в час).Сайт является сайтом знакомств, поэтому генерирует много электронных писем, поэтому лимит достигается довольно регулярно.

2 - у меня есть VPS, с которого я могу отправлять неограниченное количество писем.

Я хочу использовать 2 для отправки писем за 1. Очевидный ответ - переместить сайт на сервер 2, ноэто не вариант в настоящее время.

Обе настройки php / mysql.

заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 03 декабря 2010

вы вообще можете настроить сервер 2?если да, можете ли вы настроить его на ретрансляцию сообщений на сервер 1. Если вы можете, то просто укажите php-сценарий server1 на использование host2, а не localhost для отправки SMTP.

, если вы не можете настроить, как описано выше, вымог бы создать страницу на server2, на которой server1 отправляет электронную почту для отправки, а затем отправлять с server2 ... Ооо, на server2 у вас будет «relay.php», который принимает отправленные значения, представляющие отправляемую электронную почту (addressFrom, addressTo, при условии, тело).Вы бы использовали curl на сервере server1 для отправки запроса post в relay.php.Это некрасиво и может работать не слишком хорошо, и не так хорошо, как при использовании SMTP, но оно будет делать то, что вы хотите.в идеале, посмотрите, как заставить server2 принимать SMTP-ретранслятор от server1 - ваш хост может вам помочь.

1 голос
/ 03 декабря 2010

Настройте PHP-скрипт на VPS, используя скрытый URL, который преобразует его запросы POST в электронные письма.

Это не самый безопасный вариант (на самом деле, вообще не безопасный). Если вы заботитесь о безопасности (и вам следует), попробуйте установить туннель ssh между ними и передать сообщения через него.

0 голосов
/ 03 декабря 2010

Соображения безопасности

  • Host 2 должен иметь SSL (поскольку у вас есть VPS, он может и, возможно, уже включен).В противном случае другой пользователь с общего хостинга может прослушивать пакеты, потому что он будет отправлен в виде обычного текста, если host 2.Вы должны внимательно следить за своими почтовыми журналами.

Решение A

  1. Если вы хотите отправить электронное письмо от 1 to 2, сделайте асинхронный запрос (при необходимости) от 1 to 2.Когда вы делаете запрос асинхронно, пользователям не нужно ждать отправки электронной почты.Вы можете, например, использовать этот фрагмент для достижения этой цели.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).И некоторые пакеты узлов (экспресс, соединение, электронная почта узла)
  • могут быть небезопасными, если не имеют SSL.

Код

Я написал службу электронной почты в узлевсего за пару минут.

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)
}
...