Электронная почта на внешнем сервере и использование PHP для отправки электронной почты

Я буду использовать G Suite (формально Google Apps) для размещения электронной почты сайта, работающего на отдельном хосте.

Однако на сайте есть контактная форма, я еще не смотрел ее, но предполагаю, что она будет использовать стандартную функцию mail().

Насколько я понимаю, mail() по-прежнему будет использовать почтовый сервер сервера для отправки почты, это может быть глупый вопрос, но я предполагаю, что это не вызовет проблем с обнаружением спама из-за этого? Например, я знаю, что некоторые серверы не будут принимать почту, если заголовки From и / или Sender не соответствуют серверу, с которого она приходит (или в некоторых случаях, если электронная почта, которую вы указали в этих заголовках, не существует).

Таким образом, если почта размещается в G Suite, и адрес электронной почты, указанный в заголовках From / Sender, существует в G Suite, это не вызовет никаких проблем. ?

Наконец, я знаю, что, вероятно, лучше использовать SMTP для отправки почты через Google, но у меня может не быть этого выбора, поэтому я хотел на всякий случай узнать ответ на вышеизложенное.

Изменить. Согласно ответу Нимы, этого можно избежать, или только с помощью Googles SMTP-сервер для отправки?


person Brett    schedule 04.08.2017    source источник
comment
Разве это не частичный дубликат stackoverflow.com/a/33506709/623150, поскольку вы можете просто использовать SMTP в Gmail для отправки электронные письма с серверов Gmail   -  person Barkermn01    schedule 08.08.2017
comment
@MartinBarker Нет, пожалуйста, прочтите мой ответ на ваш ответ. Мой вопрос был не об использовании SMTP; Я коснулся этого, но основной вопрос был связан с настройкой заголовков писем, и если это вызовет какие-либо проблемы.   -  person Brett    schedule 08.08.2017
comment
Хорошо, так что из вашей обратной связи, что, черт возьми, вы хотите получить, используйте sendmail или используйте SMTP. Поскольку sendmail просто используется как приложение-менеджер перед SMTP, они являются вашими единственными вариантами в PHP, если вы не хотите создать свой собственный sendmail совместимый исполняемый файл для вашего сервера.   -  person Barkermn01    schedule 09.08.2017
comment
Это не проблема PHP. Это проблема почтового сервера. Возможно, вы получите более точные ответы на ServerFault. Однако, если вы хотите принимать электронные письма от вашего MailServer от других поставщиков электронной почты, вы должны убедиться, что обратный DNS (RDNS), вероятно, настроен и соответствует домену отправителя.   -  person Christian Gollhardt    schedule 09.08.2017
comment
@MartinBarker Я думаю, что мой вопрос ясно объясняет, на что я хочу получить ответ; если в целом это не вызовет никаких проблем или есть шанс на это, мне лучше посоветовать использовать SMTP напрямую из Google.   -  person Brett    schedule 09.08.2017
comment
@ChristianGollhardt Верно, наверное, стоит опубликовать это на ServerFault.   -  person Brett    schedule 09.08.2017


Ответы (3)


Если вы хотите, чтобы это было просто, просто используйте SMTP.

Из-за спама поставщик нескольких почтовых серверов блокирует почту с почтовых серверов, на которых нет правильного RDNS (обратный DNS) и настроено имя MTA.

Вы хотите убедиться, что все три имени совпадают в соответствии с вашей записью MX:

Также убедитесь, что ваш php.ini имеет правильную конфигурацию для вашего почтового сервера. Поздравляем, теперь вы можете отправлять письма, используя mail(...).

Как я уже сказал, это, вероятно, проще всего, просто используя SMTP. Поручите тяжелую работу хостеру.

person Christian Gollhardt    schedule 09.08.2017
comment
Итак, вы в основном говорите, что, вероятно, не рекомендуется устанавливать заголовки From: и / или Sender: для почтового домена, в котором GSuite является хостом, когда почта фактически не поступает с почтовых серверов Googles, но если я хотел по какой-то причине, тогда я должен был сделать то, что вы объяснили выше? Если так, то да, SMTP кажется намного проще, ха! - person Brett; 09.08.2017
comment
Не путайте From и Sender. Взгляните здесь. В основном имя хоста отправителя - это имя хоста с MX-записью для вашего почтового сервера. У отправителя может быть другой домен, например ваш адрес в Google. Но да, зачем поддерживать собственный почтовый сервер, если он у вас уже есть. Простая аутентификация по SMTP. Это путь. @Brett - person Christian Gollhardt; 09.08.2017
comment
Также обратите внимание, что у вас может быть отдельная учетная запись электронной почты для целей отправки, в которой указан отправитель вашей основной учетной записи электронной почты, если это причина, по которой вам не нравится SMTP. Поскольку Gmail известен тем, что переписывает эти заголовки, возможно, вы могли бы использовать другого подчиненного отправителя. Обычно у вас есть учетная запись электронной почты у продавца домена? В качестве альтернативы вместо изменения From вы также можете изменить Reply-To. Но это всего лишь предположение о вашей мотивации, стоящей за вашим вопросом. @Brett - person Christian Gollhardt; 09.08.2017
comment
Ну, мне вообще не нравится SMTP, просто я не был уверен, собираюсь ли я использовать его в этом случае. Я обычно устанавливаю заголовок From: на что-то вроде [email protected], а Reply-to: - на электронную почту пользователей, отправивших форму; это потому, что в прошлом были случаи, когда некоторые почтовые серверы отклоняли почту, когда From: был установлен на адрес электронной почты пользователя; но, может быть, это потому, что я не установил заголовок Sender:? - person Brett; 09.08.2017
comment
Скорее всего, это связано с тем, что использовался локальный почтовый сервер, для которого домен, вероятно, не был настроен (см. 3 имени хоста выше). Отправитель обычно устанавливается почтовым сервером. Либо вы правильно настроите свой почтовый сервер, либо он никогда не заработает. На стороне php вы ничего не можете изменить. - person Christian Gollhardt; 09.08.2017
comment
Просто следуя этому, при использовании SMTP вы можете установить заголовок From, но убедитесь, что ваша отправка из почтового аккаунта, привязанного к этому адресу электронной почты, вы можете использовать псевдонимы писем в G Suit EG [email protected] может иметь no-reply@ в качестве псевдонима, вы можете настроить фильтры для автоматического удалите электронные письма, приходящие на этот адрес электронной почты, тогда ваш php сможет войти в систему с contact@ данными и отправить From заголовок no-reply@ - person Barkermn01; 10.08.2017

Когда вы используете GSUITE для размещения электронной почты, очевидно, что вы предоставите GSUITE какое-то доменное имя.

Теперь электронные письма помечаются как спам, а не как спам на основе содержимого, а также сертификаты отправляющего сервера и отправляющие серверы имеют разные службы для транзакционных и маркетинговых писем. А GSUITE предоставляет только сервис транзакционной почты, а транзакционная почта из почтовой службы, имеющая действующие сертификаты и не занесенная в черный список, попадает непосредственно в папку «Входящие» или другой ярлык, но не в спам / продвижение.

Теперь у GSUITE есть все правильные сертификаты, и я не думаю, что есть какой-либо поставщик почтовых услуг, ориентированный на потребителя, который блокирует электронные письма, поступающие с серверов Google.

Другой вопрос: - Имеет ли значение From Address в заголовках E-MAIL? До сих пор я никогда не видел, чтобы адрес влиял на что-либо на принимающих серверах, но некоторые потребительские почтовые службы блокируют использование адреса from, отличного от адреса электронной почты учетной записи, точно так же, как операторы мобильной связи не позволяют нам использовать чужой идентификатор вызывающего абонента (в идеале). Но поставщики почтовых услуг для предприятий позволяют использовать любой адрес в качестве значения from в заголовках электронной почты.

Изменить: - Если вы все еще не уверены в доставке писем, вы можете использовать заголовок replyTo без каких-либо проблем.

PS: - Я сам протестировал это с тысячами писем, но с использованием серверов SendGrid.

person Ravinder Payal    schedule 06.08.2017
comment
Установка заголовка From:, безусловно, может повлиять на некоторые принимающие почтовые серверы, я видел это снова и снова, когда иногда люди не получают электронную почту из своих контактных форм, и это потому, что заголовок From: имеет был установлен на адрес электронной почты пользователя, который отправил форму, а не на адрес электронной почты отправляющего сервера; вот почему всегда рекомендуется использовать для этого заголовок Reply-To:; Еще одна проблема, которую я видел, - это то, что некоторые серверы отклоняют почту с адресов, которых на самом деле не существует. - person Brett; 07.08.2017
comment
Ну да, я знаю, что могу использовать reply-to, но поскольку, как я указал, некоторые серверы отклоняют электронные письма из-за неправильного адреса From: и / или Sender:, я пытаюсь найти лучший способ решения этой проблемы, если я не могу использовать SMTP. - person Brett; 07.08.2017
comment
@Brett хорошо, тогда ответ будет лучшим решением. - person Ravinder Payal; 07.08.2017
comment
Не совсем, это просто устанавливает адрес Reply-to, вам все равно нужно установить From: - это обязательно. - person Brett; 07.08.2017

http://php.net/manual/en/function.mail.php

Реализация mail () в Windows во многом отличается от реализации в Unix. Во-первых, он не использует локальный двоичный файл для составления сообщений, а работает только с прямыми сокетами, что означает, что MTA необходим для прослушивания сетевого сокета (который может быть либо на локальном хосте, либо на удаленной машине).

В Linux исполняемый файл sendmail используется для связи с SMTP-сервером, настроенным в Windows, вы можете / можете настроить функцию mail() для использования SMTP

Таким образом, лучший способ - использовать SMTP напрямую для отправки электронного письма в Gmail для отправки электронного письма.

Взято из: https://stackoverflow.com/a/33506709/623150

Вот способ сделать это с помощью PHP PEAR

// Pear Mail Library
require_once "Mail.php";

$from = '<[email protected]>'; //change this to your email address
$to = '<[email protected]>'; // change to address
$subject = 'Insert subject here'; // subject of mail
$body = "Hello world! this is the content of the email"; //content of mail

$headers = array(
    'From' => $from,
    'To' => $to,
    'Subject' => $subject
);

$smtp = Mail::factory('smtp', array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => '465',
        'auth' => true,
        'username' => '[email protected]', //your gmail account
        'password' => 'snip' // your password
    ));

// Send the mail
$mail = $smtp->send($to, $headers, $body);

Если вы используете gmail smtp, не забудьте включить SMTP в своей учетной записи gmail в настройках

На Linux-сервере вы не можете использовать SMTP через почтовую функцию.

person Barkermn01    schedule 08.08.2017
comment
Спасибо за ответ, но я уже знаю, как использовать SMTP. Мой вопрос касался использования функции PHP mail и / или sendmail, и это могло вызвать какие-либо проблемы с gmail, думая, что значения from / sender кажутся подозрительными или нет. - person Brett; 08.08.2017
comment
обновлен, чтобы скрыть его, поскольку он работает по-разному в зависимости от используемой вами ОС - person Barkermn01; 09.08.2017
comment
SMTP-сервер - это то, что отправляет электронное письмо, а не PHP, если вы не предоставляете заголовки, он не переопределяет их на SMTP-сервере Googles, если вы это сделаете, просто оставьте их отсутствующими. - person Barkermn01; 09.08.2017
comment
Я знаю, что PHP технически не отправляет электронное письмо, но я думаю, что вы знаете, что я здесь имею в виду - есть разница в получении PHP на порт или настройке вашей почты для отправки на SMTP сервер, чем при использовании SMTP напрямую. - person Brett; 09.08.2017