Не могу отправить электронную почту на адреса в моем собственном домене

У меня есть простой скрипт php на моем домене, который отправляет мне электронное письмо:

...
$toMail = "me@gmail.com"; //this works - I get the email at my gmail
$toMail = "me@mydomain.com"; //this doesn't - I get nothing

mail($toMail, $subject, $message, $header); 

Какую настройку изменить, чтобы это исправить?

19 ответов

Решение

Я сам столкнулся с этой проблемой, когда недавно занимался редизайном сайта.

Была проблема с тем, как была настроена наша система, так что система подумала, что, поскольку электронная почта пришла с того же домена, она была спамом и поэтому блокировала ее.

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

Либо так, либо вам придется изменить заголовки, чтобы они выглядели так, как будто они отправляются с внешнего адреса. Надеюсь, вы все разберетесь.

Для людей, использующих Google Apps для электронной почты, но имеющих своего хоста у другого провайдера, это более подробные инструкции для людей, которые не очень знакомы с cPanel.

Я мог бы решить проблему отправки электронной почты с моего домена, используя форму PHP, при отправке электронной почты на учетную запись внутри моего домена.

т.е. mydomain.com Форма обратной связи, отправляющая электронное письмо на contact@mydomain.com. Вышеуказанное не работает, даже если в моем домене есть правильные записи MX для домена, использующие Google Apps.

Как отметил Майк (и другие) выше, проблема была решена: добавление записей MX в cPanel.

  1. Войдите в cPanel
  2. Зайдите в раздел Почта cPanel
  3. Поиск MX Entry Maintenance, иногда над значком нет текста.
  4. Выберите связанный домен
  5. Измените маршрутизацию электронной почты на удаленный почтовый обменник.
  6. Добавьте все записи Google MX в том виде, в каком они есть в конфигурации вашего домена, используя соответствующие значения приоритета. Вы можете проверить записи здесь и приоритеты https://support.google.com/a/answer/174125
  7. Дважды проверьте, что удаленный почтовый обменник. выбран.

С помощью этого параметра я смог отправить электронную почту с помощью функции PHP почты на учетную запись электронной почты в том же домене, что и мой веб-сайт.

Инструкции Google App о записях MX https://support.google.com/a/answer/54717?hl=en

Верхний ответ на https://serverfault.com/questions/65365/disable-local-delivery-in-sendmail мне кажется правильным. Суть в том, что вы хотите следующее в вашем sendmail.mc:

define(`MAIL_HUB`, 'example.com.')dnl
define(`LOCAL_RELAY`, 'example.com.')dnl

Где example.com - рассматриваемый домен.

Если вы используете postfix, сделайте это:

  1. подключиться к вашему серверу через SSH.
  2. отредактируйте ваш файл main.cf:

nano /etc/postfix/main.cf

  1. закомментируйте следующую строку с #:

# mydestination = ...

  1. добавить в конце документа main.cf:

mydestination =

  1. перезагрузите конфигурацию postfix, запустив:

/etc/init.d/postfix reload

Вам нужно установить дополнительный параметр в вашей почтовой функции. В вашем рабочем примере вам необходимо добавить к вашему адресу электронной почты '-f', например:

mail($toMail, $subject, $message, $header, "-fme@mydomain.com");

У меня была такая же проблема, и я смог решить ее следующим образом. Я не храню почту локально на сервере, но использую записи MX на регистраторе для направления почты в Службы Google. Оказалось, что записи MX также необходимо обновить в Cpanel, поскольку сервер не принимает записи MX от регистратора, а вместо этого отбрасывает их, поскольку не было локальной записи MX или почтового ящика. Я обновил записи MX на Cpanel, чтобы они соответствовали записям MX регистратора, и проблема была решена немедленно

Я согласен с Майклом Хеллейном, коренной проблемой может быть ваша sendmail, считающая ваши почтовые учетные записи домена example.com локальными. Если так, вот несколько направляющих ссылок:

Но в моем случае, используя FreeBSD 8.2, в действительности получилось:

# cd /etc/mail
# vim freebsd.mc

Добавьте эти две строки:

define(`MAIL_HUB', `example.com.')dnl
define(`LOCAL_RELAY', `example.com.')dnl

Прямо перед:

MAILER(local)
MAILER(smtp)

Затем:

# make

Это вывод:

cp freebsd.mc host.example.com.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.mc > host.example.com.cf
cp freebsd.submit.mc host.example.com.submit.mc
/usr/bin/m4 -D_CF_DIR_=/usr/share/sendmail/cf/   /usr/share/sendmail/cf/m4/cf.m4 host.example.com.submit.mc > host.example.com.submit.cf

Затем:

# cp sendmail.cf sendmail.cf.bak
# cp host.example.com.cf sendmail.cf
# /etc/rc.d/sendmail restart

Надеюсь, это избавит кого-то от головной боли.

Ваша электронная почта размещена на сервере, отличном от веб-сайта? В этом случае PHP-скрипт может пытаться отправить его изнутри, и в этом случае он просто исчезнет, ​​тогда как другие целевые электронные письма будут помещены в Интернет и перенаправлены должным образом.

Решение, которое я нашел, состояло в том, чтобы отключить почтовый сервер на вашем веб-хосте, а затем PHP поместит сообщение в Интернет для правильной отправки.

С PostFix, Debian7, SMTP Mailjet

Если домен my-domain.com, в /etc/postfix/main.cf, менять

mydestination = my-domain.com, localhost, localhost.localdomain, localhost

в

mydestination = localhost, localhost.localdomain, localhost

Почтовый сервер SMTP тоже может быть вариантом.

У меня тоже была эта пробема. Отключение почтового сервера означало, что письмо вообще не было отправлено! Таким образом, я решил исправить все локальные доменные имена из /etc/mail/local-host-names файл

Для меня сработало то, что я выбрал Local Mail Exchanger:

  • Перейти к cPanel
  • Выберите маршрутизацию электронной почты
  • Выберите свой домен
  • Выберите Локальный обменник почты

Local Mail Exchanger позволит вам отправить электронное письмо на учетную запись того же домена в GoDaddy: например: электронное письмо на адрес info@yourdomain.com

У меня была эта проблема несколько раз, и виновник был, если электронная почта была размещена на другом сервере (например, Google Apps). Когда почта отправляется в локальный домен, она не беспокоится о поиске записи MX и, следовательно, не будет правильно маршрутизироваться. Решение этой проблемы - просто отключить функцию почты на вашем сервере вашим хостом.

Убедитесь, что вы действительно можете отправить почту на адрес электронной почты вашего домена, а затем проверьте свой код / ​​адрес электронной почты, чтобы убедиться, что все написано правильно... если ничего из этого не помогло, я не знаю, что пошло не так..

Как объясняли другие, некоторые серверы настроены на отклонение электронных писем, на которых отсутствует действительный адрес электронной почты на отправляющем сервере. Убедитесь, что в строке $headers указан определенный действительный адрес электронной почты "From:foo@example.com".

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

Убедитесь, что ваш txt запись настроена правильно для вашего домена. Это обычно происходит, когда вы не помещаете это в txt запись:@ (None)v = spf1 include: _spf.google.com ~ all

Я потратил более 8 часов на эту ошибку и решил ее, просто изменив заголовок на любой другой адрес электронной почты, и он будет работать

У меня была похожая проблема, когда все письма отлично отправлялись на другие домены, такие как gmail, live, yahoo и т. Д., Но все письма исчезали на локальных доменах. У меня был VPS-сервер с Godaddy, который работал на основе Linux с Qmail.

Я решил проблему, удалив определенные доменные имена в файле var/qmail/control/virtualdomains.

Другие вопросы по тегам