Электронная почта и Интернет разделены на разных серверах: отправляйте электронную почту через PHP на электронную почту в этом домене.

1 домен с портом 80 и MX, разделенным на DNS:

  • Сайт размещен на VPS.
  • Электронная почта размещается на общем хосте.

Когда я вызываю функцию mail() в PHP на веб-сайте, который адресован электронной почте в домене, электронная почта доставляется ЛОКАЛЬНО на VPS, а не на общий сервер.

В PHP, работающем на веб-хостинге VPS с использованием домена MyDomain.com:

$headers = "From: MyName <[email protected]>\r\n";
$headers .="Return-Path:<[email protected]>\r\n";
mail( "[email protected]", "Header", "Content", $headers);

Как заставить mail() выполнять поиск MX для домена? Как сделать так, чтобы электронная почта доставлялась на общий хост, а не на VPS?

Я пытался сделать это, но это не сработало:

ini_set("SMTP","123.456.789.012");

Где 123.456.789.012 — это IP-адрес общего хоста.

Общий хост - hostmonster. Есть ли способ указать почтовый ящик, используя ip и имя пользователя? имя2~имя пользователя@123.456.789.012


person Travis    schedule 03.11.2011    source источник
comment
если smtp-сервер находится на машине, отличной от той, которая отправляет почту, его необходимо настроить, чтобы разрешить это, по умолчанию большинство из них не   -  person    schedule 03.11.2011


Ответы (2)


Откажитесь от функции mail() в пользу PHPMailer. Он намного более гибкий, объектно-ориентированный, гораздо проще настроить с помощью SMTP и имеет гораздо лучшую поддержку вложений (если вам это нужно).

Чтобы отправить вашу электронную почту в phpmailer, вам просто нужно что-то вроде этого, чтобы настроить SMTP:

$mailer = new PHPMailer();
$mailer->Mailer = 'smtp';
$mailer->Host = '123.456.789.012';
$mailer->From = '[email protected]';
$mailer->FromName = 'Me Myself';
$mailer->AddAddress = '[email protected]';
$mailer->Subject = 'My subject line';
$mailer->Body = 'Your Body text here, in HTML if you set $mailer->IsHtml(true)';
$mailer->Send();
person davidethell    schedule 03.11.2011
comment
Это хорошее и долгосрочное решение этой проблемы. Спасибо! - person Travis; 04.11.2011

Проблема в том, что ваш VPS-сервер настроен на обработку почты для вашего домена. Соответственно настройте свою почтовую конфигурацию. Кроме того, Linux игнорирует настройку SMTP. Только Windows использует это.

В качестве альтернативы вы можете использовать такой класс, как PHPMailer, который может напрямую подключаться к удаленному SMTP-серверу.

person Brad    schedule 03.11.2011
comment
Это была моя первая мысль, но электронная почта отключена в этом домене на VPS. - person Travis; 03.11.2011
comment
@Travis, это не значит, что конфигурация все еще неверна. Ваш сервер думает, что это почтовый сервер вашего домена. В противном случае почта будет ретранслироваться. - person Brad; 03.11.2011
comment
Брэд, я дошел до того, что отключил всех демонов, имеющих хоть какое-то отношение к электронной почте. Я не могу продолжать так долго, потому что там есть другие домены, которые пользуются этими услугами. Не повезло, хотя, и я в полной потере. - person Travis; 04.11.2011
comment
@Travis, это не имеет ничего общего с демоном, а с конфигурацией. Отправьте сообщение на serverfault.com, чтобы получить помощь по конкретной проблеме с конфигурацией. - person Brad; 04.11.2011
comment
Брэд, я сделаю это, и ты, вероятно, совершенно прав. На VPS работает cPanel/WHM, и когда я отключаю эти службы, WHM также обрабатывает все детали конфигурации. Комментарий Дэвида был допустимым обходным путем для моего невежества. - person Travis; 04.11.2011