Не работает функция mail php: Почему PHP функция mail() не работает на сервере? — Хабр Q&A

Содержание

macos — Функция PHP mail() не работает в Mac OS X

Я перешел по всем ссылкам, приведенным в этом посте, ничего не получилось.
Пожалуйста, объясните мне, почему PHP mail() создает столько проблем? Что именно происходит и почему это не сработает?

Я использую macOS Lion (10.7.3).

Я сделал все изменения, что нужно, как:

setting MAILSERVER=-YES- in my /etc/hostconfig
Setting sendmail_path = /usr/sbin/sendmail -t -i  in php.ini
Setting myhostname variable in /etc/postfix/main.cf 
Setting hostname/User/Pass in submit.cred

Поэтому, пожалуйста, дайте мне решение, кроме изменения этих файлов.

Проблемы, с которыми я сталкиваюсь:

  1. Как только я начну postfix, я получу предупреждающие сообщения

    sudo postfix start
    postfix/postfix-script: warning: not owned by root: /etc/postfix/main.cf
    postfix/postfix-script: warning: not owned by root: /etc/postfix/submit.cred
    postfix/postfix-script: warning: not owned by _postfix:     /Library/Server/Mail/Data/mta/. /master.lock
    postfix/postfix-script: warning: group or other writable: /Library/Server/Mail/Data/mta
    postfix/postfix-script: starting the Postfix mail system
    
  2. В mail.log я получу следующий вывод:

    postfix/smtp[470]: 211B318690B: to=<[email protected]>, relay=none, delay=86583, delays=86521/0.05/62/0, dsn=4.4.1, status=deferred (connect to alt2.gmail-smtp-in.l.google.com[2607:f8b0:4002:c02::1a]:25: No route to host)
    postfix/smtp[473]: connect to [email protected] : Operation timed out
    postfix/smtp[473]: to=<[email protected]>, relay=none, delay=169837, delays=169717/0.04/120/0, dsn=4.4.1, status=deferred (connect to example.com: Operation timed out) 
    

Когда я alt2.gmail-smtp-in.l.google.com , он скажет

Request timeout for icmp_seq 0
36 bytes from IPADD: Communication prohibited by filter

(Обратите внимание, что IPADD означает, что там указан некоторый IP-адрес.)

Не работает PHP mail() — Сервера

Классическая проблема. Изначально письма сформированые mail() в скрипте PHP вообще не отправлялись, функция mail() возвращала false. Проблему я решил. Попутно разобрался с настройкой exim4 на Debian. Об этом и расскажу.

Проблема в php.ini

Первым делом полез в php.ini. Там нашел строки

For Unix only. You may supply arguments as well (default: «sendmail -t -i»).
; http://php.net/sendmail-path
sendmail_path = /usr/sbin/sendmail



For Unix only.  You may supply arguments as well (default: «sendmail -t -i»).

; http://php.net/sendmail-path

sendmail_path = /usr/sbin/sendmail

Сделал очевидное дописал как в комменте в default

sendmail_path = /usr/sbin/sendmail -t -i



sendmail_path = /usr/sbin/sendmail -t -i

Перегрузил апач

Функция mail() перестала возвращать false, но письма не приходили. Причем на разные ящики.

Ставим exim4

В процессе гугления обнаружил, что многие решают проблему не уходящей почты установкой exim4. Чтож попробовал.

Но установка не получилась.

Exim4 не устанавливается

При попытке установки получил следующюю ошибку:

E: Could not perform immediate configuration on ‘exim4-daemon-light’. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)



E: Could not perform immediate configuration on ‘exim4-daemon-light’. Please see man 5 apt.conf under APT::Immediate-Configure for details. (2)

Гугление нашло такую проблему и решение:

Сначала

apt-get install exim4-base exim4-config



apt-get install exim4-base exim4-config

Потом

apt-get install exim4-daemon-light



apt-get install exim4-daemon-light

Ну и

dpkg-reconfigure exim4-config



dpkg-reconfigure exim4-config

Там в первом окошке выбираем верхнюю строчку, чтото типа «internet site …», ну а дальше можно просто жать энтер, ну или поправить по усмотрению.

Теперь настраиваем php.ini на exim4 вместо sendmail

меняем в php.ini

sendmail_path = /usr/sbin/sendmail -t -i



sendmail_path = /usr/sbin/sendmail -t -i

на

sendmail_path = /usr/sbin/exim4 -t



sendmail_path = /usr/sbin/exim4 -t

Перегружаем апач, ну и собственно всё. Почта уходит, адресат получает.

Настройка почты для работы в php-fpm из chroot

После установки PHP как php-fpm работающего в chroot и установки сервера почты можно обнаружить, что отправка почты из PHP стандартной функцией mail не работает. И это не удивительно, т.к. стандартный вариант PHP шлет почту через sendmail, который складывает сгенерированные письма в файлики уже непосредственно тому, кто будет отсылать. Поскольку наш PHP находится в chroot, то и до sendmail он достучаться не может. Если sendmail со всеми библиотеками положить в наш chroot и как следует настроить, то это может решить проблему, но путь этот слишком сложный, в замен этого предлагаю два более простых:

  • Если ваши php скрипты могут слать почту через SMTP — их надо просто настроить так, чтобы почта отправлялась с локального SMTP вашего VDS. Это не лечит mail, но и делать ничего не надо.
  • Если скрипты умеют использовать только функцию PHP mail, то слать почту через mini_sendmail. Об этом варианте и пойдет речь.

Установка mini_sendmail будет произведена из сырцов. Так же нам потребуется bash скомпилированный статически (все библиотеки внутри, чтобы не тащить за собой весь linux) и утилита patch (для наложения патча на mini_sendmail).
Устанавливаем необходимый софт:

sudo apt-get install bash-static patch make gcc

Получаем сырцы mini_sendmail:

cd /usr/local/src
sudo wget http://acme.com/software/mini_sendmail/mini_sendmail-1.3.6.tar.gz
sudo tar xvfz mini_sendmail-1.3.6.tar.gz
sudo rm ./mini_sendmail-1.3.6.tar.gz

Перед сборкой на mini_sendmail надо наложить патч, убирающий некоторый ненужный нам функционал и некоторые ошибки. Получаем патч для mini_sendmail и накладываем на сырцы:

sudo wget http://daily-notes.ru/files/2011/11/minisendmail.patch
sudo patch -p0 < minisendmail.patch

Компилируем mini_sendmail:

cd /usr/local/src/mini_sendmail-1.3.6
sudo make

Компилятор будет ругаться предупреждениями, но нам это не помешает, т.к. работать mini_sendmail будет только на локальном хосте. После компиляции mini_sendmail лежит тут — /usr/local/src/mini_sendmail-1.3.6/mini_sendmail.
Теперь надо создать нужную структуру папок в chroot и разложить копии наших файликов. Пристраиваем mini_sendmail (он будет притворяться sendmail ;)):

sudo mkdir /home/koteika.ru/usr/sbin
sudo cp /usr/local/src/mini_sendmail-1.3.6/mini_sendmail /home/koteika.ru/usr/sbin/mini_sendmail
sudo chmod +x /home/koteika.ru/usr/sbin/mini_sendmail
sudo ln -s mini_sendmail sendmail
sudo mv ./sendmail /home/koteika.ru/usr/sbin/sendmail

Теперь надо добавить bash для того, чтобы PHP смог запускать mini_sendmail:

sudo cp /bin/bash-static /home/koteika.ru/bin/bash-static
sudo chmod +x /home/koteika.ru/bin/bash-static
sudo ln -s bash-static sh
sudo mv ./sh /home/koteika.ru/bin/sh

Теперь правим конфиг php-fpm для нашего сайта (у меня это /usr/local/php/etc/pools/koteika.ru.conf). Добавим вот такую строчку:

php_admin_value[sendmail_path] = /usr/sbin/sendmail -t [email protected]

Где: [email protected] — адрес, с которого будет отправляться почта по умолчанию.
Перезапускаем php-fpm и радуемся работающей почте:

sudo service php5-fpm restart

Если вам понравилась моя статья, пожалуйста, не поленитесь кликнуть любую кнопочку ниже, или кинуть ссылку на статью в свой блог или форум. Всегда рад ответить на ваши вопросы в комментариях. Спасибо 🙂

Склеивание текста по условию


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


Допустим, что у нас имеется база данных по клиентам, где одному названию компании может соответствовать несколько разных email’ов ее сотрудников. Наша задача состоит в том, чтобы собрать все адреса по названиям компаний и сцепить их (через запятую или точку с запятой), чтобы сделать потом, например, почтовую рассылку по клиентам, т.е. получить на выходе что-то похожее на:


Другими словами, нам нужен инструмент, который будет склеивать (сцеплять) текст по условию — аналог функции СУММЕСЛИ (SUMIF), но для текста.

Способ 0. Формулой


Не очень изящный, зато самый простой способ. Можно написать несложную формулу, которая будет проверять отличается ли компания в очередной строке от предыдущей.  Если не отличается, то приклеиваем через запятую очередной адрес. Если отличается, то «сбрасываем» накопленное, начиная заново:



Минусы такого подхода очевидны: из всех ячеек полученного дополнительного столбца нам нужны только последние по каждой компании (желтые). Если список большой, то чтобы их быстро отобрать придется добавить еще один столбец, использующий функцию ДЛСТР (LEN), проверяющий длину накопленных строк:



Теперь можно отфильтровать единички и скопировать нужные склейки адресов для дальнейшего использования.

Способ 1. Макрофункция склейки по одному условию


Если исходный список не отсортирован по компаниям, то приведенная выше простая формула не работает, но можно легко выкрутиться с помощью небольшой пользовательской функции на VBA. Откройте редактор Visual Basic нажатием на сочетание клавиш Alt+F11 или с помощью кнопки Visual Basic на вкладке Разработчик (Developer). В открывшемся окне вставьте новый пустой модуль через меню Insert — Module и скопируйте туда текст нашей функции:

Function MergeIf(TextRange As Range, SearchRange As Range, Condition As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
    
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange.Count <> TextRange.Count Then
        MergeIf = CVErr(xlErrRef)
        Exit Function
    End If
    
    'проходим по все ячейкам, проверяем условие и собираем текст в переменную OutText
    For i = 1 To SearchRange.Cells.Count
        If SearchRange.Cells(i) Like Condition Then OutText = OutText & TextRange.Cells(i) & Delimeter
    Next i
    
    'выводим результаты без последнего разделителя
    MergeIf = Left(OutText, Len(OutText) - Len(Delimeter))
End Function


Если теперь вернуться в Microsoft Excel, то в списке функций (кнопка fx в строке формул или вкладка Формулы — Вставить функцию) можно будет найти нашу функцию MergeIf в категории Определенные пользователем (User Defined). Аргументы у функции следующие:

Способ 2. Сцепить текст по неточному условию


Если заменить в 13-й строчке нашего макроса первый знак = на оператор приблизительного совпадения Like, то можно будет осуществлять склейку по неточному совпадению исходных данных с критерием отбора. Например, если название компании может быть записано в разных вариантах, то мы можем одной функцией проверить и собрать их все:


Поддерживаются стандартные спецсимволы подстановки:

  • звездочка (*) — обозначает любое количество любых символов (в т.ч. и их отсутствие)
  • вопросительный знак (?) — обозначает один любой символ
  • решетка (#) — обозначает одну любую цифру (0-9)


По умолчанию оператор Like регистрочувствительный, т.е. понимает, например, «Орион» и «оРиОн» как разные компании. Чтобы не учитывать регистр можно добавить в самое начало модуля в редакторе Visual Basic строчку Option Compare Text, которая переключит Like в режим, когда он невосприимчив к регистру.


Таким образом можно составлять весьма сложные маски для проверки условий, например:

  • ?1##??777RUS — выборка по всем автомобильным номерам 777 региона, начинающимся с 1
  • ООО* — все компании, название которых начинается на ООО
  • ##7## — все товары с пятизначным цифровым кодом, где третья цифра 7
  • ????? — все названия из пяти букв и т.д.

Способ 3. Макрофункция склейки текста по двум условиям


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

Function MergeIfs(TextRange As Range, SearchRange1 As Range, Condition1 As String, SearchRange2 As Range, Condition2 As String)
    Dim Delimeter As String, i As Long
    Delimeter = ", " 'символы-разделители (можно заменить на пробел или ; и т.д.)
    
    'если диапазоны проверки и склеивания не равны друг другу - выходим с ошибкой
    If SearchRange1.Count <> TextRange.Count Or SearchRange2.Count <> TextRange.Count Then
        MergeIfs = CVErr(xlErrRef)
        Exit Function
    End If
    
    'проходим по все ячейкам, проверяем все условия и собираем текст в переменную OutText
    For i = 1 To SearchRange1.Cells.Count
        If SearchRange1.Cells(i) = Condition1 And SearchRange2.Cells(i) = Condition2 Then
            OutText = OutText & TextRange.Cells(i) & Delimeter
        End If
    Next i
    
    'выводим результаты без последнего разделителя
    MergeIfs = Left(OutText, Len(OutText) - Len(Delimeter))
End Function


Применяться она будет совершенно аналогично — только аргументов теперь нужно указывать больше:

Способ 4. Группировка и склейка в Power Query


Решить проблему можно и без программирования на VBA, если использовать бесплатную надстройку Power Query. Для Excel 2010-2013 ее можно скачать здесь, а в Excel 2016 она уже встроена по умолчанию. Последовательность действий будет следующей:


Power Query не умеет работать с обычными таблицами, поэтому первым шагом превратим нашу таблицу в «умную». Для этого ее нужно выделить и нажать сочетание Ctrl+T или выбрать на вкладке Главная — Форматировать как таблицу (Home — Format as Table). На появившейся затем вкладке Конструктор (Design) можно задать имя таблицы (я оставил стандартное Таблица1):



Теперь загрузим нашу таблицу в надстройку Power Query. Для этого на вкладке Данные (если у вас Excel 2016) или на вкладке Power Query (если у вас Excel 2010-2013) жмем Из таблицы (Data — From Table):


В открывшемся окне редактора запросов выделяем щелчком по заголовку столбец Компания и сверху жмем кнопку Группировать (Group By). Вводим имя нового столбца и тип операции в группировке — Все строки (All Rows):



Жмем ОК и получаем для каждой компании мини-таблицу сгруппированных значений. Содержимое таблиц хорошо видно, если щелкать левой кнопкой мыши в белый фон ячеек (не в текст!) в получившемся столбце:


Теперь добавим еще один столбец, где с помощью функции склеим через запятую содержимое столбцов Адрес в каждой из мини-таблиц. Для этого на вкладке Добавить столбец жмем Пользовательский столбец (Add column — Custom column) и в появившемся окне вводим имя нового столбца и формулу сцепки на встроенном в Power Query языке М:



Обратите внимание, что все М-функции регистрочувствительные (в отличие от Excel). После нажатия на ОК получаем новый столбец со склееными адресами:



Осталось удалить ненужный уже столбец ТаблАдресов (правой кнопкой мыши по заголовку — Удалить столбец) и выгрузить результаты на лист, нажав на вкладке Главная — Закрыть и загрузить (Home — Close and load):


Важный нюанс: в отличие от предыдущих способов (функций), таблицы из Power Query не обновляются автоматически. Если в будущем произойдут какие-либо изменения в исходных данных, то нужно будет щелкнуть правой кнопкой в любое место таблицы результатов и выбрать команду Обновить (Refresh).

Ссылки по теме

PHP-почта не отправляет электронные письма домена на внешний почтовый сервер — Terresquall Blog

Недавно я проделал некоторую работу для клиента, у которого возникла странная проблема: контактные формы на их веб-сайте (назовем его client-website.com ), который доставлял заполненные формы запросов с использованием функции PHP mail () — не мог отправлять электронные письма на адреса электронной почты, содержащие их собственный домен.

Это означает, что если бы мы настроили форму для доставки запросов на такой адрес, как hello @ client-website.com , электронная почта будет полностью удалена — вы не найдете его в папках нежелательной почты или спама, а также не найдете следов электронной почты в их журналах администратора и электронной почты. Если мы доставили электронное письмо на наши личные адреса электронной почты (например, [email protected] ) или на электронные письма из другого домена (например, [email protected] ), то электронное письмо прошло бы (и пропустило мимо папку со спамом тоже).

В течение нескольких недель эта проблема приводила меня в замешательство, до сих пор… и это действительно очень простое решение.

Настройка веб-сайта и электронной почты клиента

Чтобы понять, почему это произошло, нам нужно сначала понять, как настроен веб-сайт клиента и служба электронной почты. В основном:

  1. Их веб-сервис (например, HTTP и HTTPS) предоставляется сервером массового хостинга. На этом сервере работает веб-сайт, поэтому он работает, когда вы посещаете их веб-сайт по адресу client-website.com .
  2. Их почтовый сервис (то есть, когда вы отправляете электронные письма в их домен) предоставляется Google Workspace , поэтому MX-записи для их домена указывают на SMTP-серверы Google.

Вот загвоздка: Сервер, который предоставляет свои веб-службы. также предоставляет услуги электронной почты, как и многие другие службы массового хостинга. Однако, поскольку их записи MX не указывают на этот сервер, он не получает электронные письма от их домена.

В поисках проблемы

В течение нескольких недель мне не приходило в голову, что вышеупомянутый улов может быть причиной проблемы. Я был ошибочно уверен, что Google Workspace, должно быть, отклонял электронные письма, отправленные из контактной формы, как спам, потому что что-то было настроено неправильно, например, SPF-запись домена.Однако, если эти электронные письма отклонялись, в журналах почты Google Workspace должно было быть указано , а это не так!

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

Оказывается, проблема заключалась в политике маршрутизации электронной почты веб-сервера — , потому что веб-сервер был также настроен как почтовый сервер для клиент-веб-сайт.com , он считает себя почтовым сервером для домена client-website.com . Это означало, что он перенаправлял все электронные письма в домен в почтовые ящики своей собственной почтовой службы. Более кратко, мы также можем сказать, что сервер маршрутизации электронной почты домена локально .

Устранение проблемы

Как только проблема была обнаружена, исправить ее стало несложно. Конкретный способ будет зависеть от интерфейса управления сервером, который предоставляет ваша служба массового хостинга.Здесь я перечисляю исправления для двух платформ:

  1. Plesk и;
  2. cPanel

Продолжение статьи после рекламы:


Plesk

Если ваш хостинг-провайдер использует Plesk, вам нужно деактивировать почтовую службу в домене (ах), который ваш хостинг-провайдер предоставляет веб-сервис для .

После входа в систему найдите соответствующие домены на вкладке «Сайты » и «Домены » и перейдите на страницу «Настройки почты ».

На вкладке Веб-сайт и домены щелкните Настройки почты .

Затем на странице Настройки почты снимите флажок Активировать почтовую службу в этом домене и нажмите кнопку Применить , чтобы сохранить это изменение. Это должно помешать серверу перенаправлять электронные письма обратно в свой почтовый ящик.

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

Не забудьте нажать Применить после снятия флажка Активировать почтовую службу в этом домене .

cPanel

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

Чтобы перейти на страницу, где вы можете это изменить, вам нужно найти элемент Email Routing на домашней странице cPanel после входа в систему.

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

На странице «Маршрутизация электронной почты » выберите опцию «Удаленный почтовый обменник » и нажмите « Изменить », чтобы сохранить настройки.

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

Не забудьте нажать кнопку Изменить , чтобы сохранить изменения после обновления настроек.

Заключение

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

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

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


Продолжение статьи после объявления:


Как настроить XAMPP для отправки почты с localhost с помощью PHP?

Чтобы настроить сервер XAMPP для отправки почты с localhost, мы должны внести изменения в два файла sendmail.ini и php.ini. Откройте папку xampp. По имени «sendmail.ini» присутствует в файле sendmail , а «php.ini» присутствует в файле php в папке xampp .

Шаг 1:

  • Перейдите в папку C: \ xampp \ sendmail: откройте файл sendmail.ini в блокноте или любом текстовом редакторе и внесите следующие изменения.
     измените smtp_server = mail.yourdomain.com на smtp_server = smtp.gmail.com
    измените smtp_port на smtp_port = 587
    изменить smtp_ssl = auto на smtp_ssl = tls 

     раскомментировать; error_logfile = error.войти в error_logfile = error.log
    раскомментируйте; debug_logfile = debug.log в debug_logfile = debug.log
    напишите свой идентификатор Gmail в auth_username: auth_username=*****@gmail.com
    напишите свой gmail assword в auth_password: auth_password = ***** 

     напишите свой gmail id в force_sender: *****@gmail.com
    измените имя хоста на hostname = localhost 

Шаг: 2

  • Перейдите в C: \ xampp \ php: откройте файл php.ini в блокноте или любом текстовом редакторе goto [функция почты] и сделайте изменения следующим образом.
    комментарий SMTP = localhost, поставив точку с запятой перед =>; SMTP = localhost
    комментарий smtp_port = 25, поставив точку с запятой infront =>; smtp_port = 25
    комментарий sendmail_from = поставив точку с запятой infront =>; sendmail_from = укажите путь к
     файл в sendmail_path к sendmail_path = C: \ xampp \ sendmail \ sendmail.exe
    
    проверьте, включено ли extension = php_openssl.dll => Если впереди стоит точка с запятой, то
     отмените комментарий, удалив точку с запятой
     

    После выполнения указанных шагов, если почта не отправляется путем вызова почтовой функции, перейдите к C: \ xampp \ sendmail , ошибка открытия.log, чтобы увидеть, что произошла ошибка.

Примечание: Здесь показана процедура для gmail, но ее можно распространить на другие письма, изменив сервер smtp, номер порта. При использовании Gmail обязательно включите параметр, разрешающий доступ к менее безопасным веб-приложениям.

Отправка электронной почты через контактную форму

Решения о том, как сделать так, чтобы ваши контактные формы успешно отправляли электронные письма

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

Мы объясним, какие настройки вам нужно использовать, чтобы ваша контактная форма работала должным образом в крупнейших и самых популярных компаниях веб-хостинга.


Варианты отправки электронной почты с помощью PHP

С PHP у вас есть несколько вариантов отправки электронных писем, три наиболее распространенных варианта перечислены ниже:

PHP mail () функция

Функция PHP mail () может работать и является самым простым вариантом, однако она очень ограничена и не рекомендуется в наши дни, поскольку все больше и больше хостинг-провайдеров и почтовых систем блокируют их.

API электронной почты с PHP

Работа с поставщиками услуг электронной почты API-интерфейсы также являются более распространенным способом отправки электронной почты с помощью PHP. Хотя у них есть реальные преимущества (например, использование расширенных сервисных функций, которые могут быть недоступны в SMTP), у них также есть некоторые недостатки, в основном то, что все они разные, поэтому, если вы решите сменить провайдера, вам, скорее всего, придется перестроить свой Интеграция электронной почты PHP. Для контактных форм PHP это не рекомендуемый способ, если нет веской причины.

PHP SMTP-соединение

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

SMTP — рекомендуемый вариант, описанный на этой странице.


Отправка сообщений PHP через SMTP

Выберите своего хостинг-провайдера ниже, чтобы увидеть, какие настройки использовать.

Если вашего хостинг-провайдера еще нет в списке, мы предлагаем задать вашему хостинг-провайдеру следующий вопрос:

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

Если вы пытаетесь запустить форму на своем компьютере на «localhost», вам необходимо убедиться, что вы правильно настроили свой почтовый сервер.Подробности об этом выходят за рамки этой страницы.

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


Настройки SMTP для GoDaddy

Это важные настройки SMTP, которые необходимо использовать при отправке электронной почты с помощью PHP через GoDaddy.

GoDaddy поддерживает стандартные SMTP-соединения без SSL или TLS.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP localhost (Linux) или relay-hosting.secureserver.net (Windows или классический)
Имя пользователя SMTP (оставить пустым)
Пароль SMTP (оставить пустым)
Порт SMTP 25
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи GoDaddy

В этих настройках используется порт 25, который не является SSL / TLS, однако все еще может быть возможность отправлять электронные письма с PHP через GoDaddy с TLS на порт 587, но вам нужно будет связаться со службой поддержки, чтобы подтвердить правильное имя хоста для использования в вашей учетной записи.

Хост SMTP отличается в зависимости от типа вашего хостинга. НА серверах Linux это localhost , а на серверах Windows это relay-hosting.secureserver.net .

Если это решение не помогло вам и вы используете GoDaddy, сообщите нам об этом.


Настройки SMTP для Ionos (1 и 1)

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через Ionos.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP smtp.ionos.co.uk
Имя пользователя SMTP Ваш адрес электронной почты в вашем аккаунте Ionos
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Ionos
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Ionos

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с Ionos.

Если это решение не сработало для вас и вы используете Ionos, сообщите нам об этом.


Настройки SMTP для Bluehost

Это важные настройки SMTP, которые необходимо использовать при отправке писем с PHP через Bluehost.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP box000.bluehost.com (см. Примечание ниже)
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи Bluehost
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Bluehost
Порт SMTP 465
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Bluehost

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через SSL на порту 465 с помощью Bluehost.

ПРИМЕЧАНИЕ: Хост SMTP выше указан как box000.bluehost.com в качестве примера, ваш хост может иметь другой номер после части «коробки». Чтобы узнать это, перейдите в свою cPanel и найдите для этого настройки конфигурации электронной почты.

Если это решение не сработало для вас и вы используете Bluehost, сообщите нам об этом.


Настройки SMTP для хостинга OVH

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через OVH.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP ssl0.ovh.net
Имя пользователя SMTP Ваш адрес электронной почты в вашем аккаунте OVH
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи OVH
Порт SMTP 465
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи OVH

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через SSL на порту 465 с OVH.

Если это решение не сработало для вас и вы используете OVH, сообщите нам об этом.


Настройки SMTP для Hetzner

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через Hetzner.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP mail.mydomain.com
Имя пользователя SMTP Ваш адрес электронной почты в вашем аккаунте Hetzner
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Hetzner
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Hetzner

Вам необходимо предоставить имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с помощью Hetzner.

ПРИМЕЧАНИЕ: Вы должны заменить части «mydomain.com» на свое собственное доменное имя.

Если это решение не помогло вам, и вы используете Hetzner, сообщите нам об этом.


Настройки SMTP для Namecheap

Это важные настройки SMTP, которые необходимо использовать при отправке писем с PHP через Namecheap.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP Доменное имя вашей учетной записи Namecheap
Имя пользователя SMTP Ваш адрес электронной почты в вашем аккаунте Namecheap
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Namecheap
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Namecheap

Необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с помощью Namecheap.

Если это решение не сработало для вас, и вы используете Namecheap, сообщите нам об этом.


Настройки SMTP для Liquid Web

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через Liquid Web.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP Имя хоста вашей учетной записи Liquid Web
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи Liquid Web
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Liquid Web
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Liquid Web

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с помощью Liquid Web.

Хостом SMTP должно быть имя хоста вашего сервера. Если вы не уверены, что это, обратитесь в службу поддержки Liquid Web, чтобы узнать.

Если это решение не помогло вам, и вы используете Liquid Web, сообщите нам об этом.


Настройки SMTP для Siteground

Это важные настройки SMTP, которые необходимо использовать при отправке электронной почты с помощью PHP через Siteground.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP Доменное имя вашей учетной записи Siteground
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи Siteground
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Siteground
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Siteground

Вам необходимо предоставить имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с Siteground.

Если это решение не сработало для вас и вы используете Siteground, сообщите нам об этом.


Настройки SMTP для DreamHost

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через DreamHost.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP smtp.dreamhost.com
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи DreamHost
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи DreamHost
Порт SMTP 465
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи DreamHost

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через SSL на порту 465 с DreamHost.

Если это решение не сработало для вас и вы используете DreamHost, сообщите нам об этом.


Настройки SMTP для InMotion

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через InMotion.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP secure00.inmotionhosting.com (см. примечание ниже)
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи InMotion
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи InMotion
Порт SMTP 465
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи InMotion

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через SSL на порту 465 с хостингом InMotion.

ПРИМЕЧАНИЕ: Хост SMTP выше указан как secure00.inmotionhosting.com в качестве примера, у вашего хоста будет другой номер после части «secure», это номер вашего сервера.
Чтобы узнать это, войдите в свой InMotion AMP и нажмите «Технические данные учетной записи», затем найдите свой номер сервера.

Если это решение не помогло вам, и вы используете InMotion, сообщите нам об этом.


Настройки SMTP для HostGastor

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через HostGastor.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP servername.hostgator.com (см. Примечание ниже)
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи HostGastor
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи HostGastor
Порт SMTP 465
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи HostGastor

Вам необходимо указать имя пользователя SMTP или пароль SMTP для аутентификации через SSL на порту 465 с HostGastor.

ПРИМЕЧАНИЕ: Хост SMTP выше указан как servername.hostgator.com в качестве примера, ваш хост будет иметь другое имя сервера перед частью «.hostgator.com».
Чтобы узнать имя вашего сервера, войдите в cpanel и посмотрите в разделе «Общая информация» свой «Основной домен».

Если это решение не сработало для вас, и вы используете HostGastor, сообщите нам об этом.


Настройки SMTP для Hostinger

Это важные настройки SMTP, которые необходимо использовать при отправке электронных писем с PHP через Hostinger.

НАСТРОЙКА ЗНАЧЕНИЕ
Хост SMTP smtp.hostinger.com
Имя пользователя SMTP Ваш адрес электронной почты в вашей учетной записи Hostinger
Пароль SMTP Пароль для вашего адреса электронной почты в вашей учетной записи Hostinger
Порт SMTP 587
Электронная почта от Адрес электронной почты, использующий домен в вашей учетной записи Hostinger

Вам необходимо предоставить имя пользователя SMTP или пароль SMTP для аутентификации через TLS на порту 587 с помощью Hostinger.

Вы можете проверить свой SMTP-хост, войдя в свою панель управления Hostinger и выбрав «Учетные записи электронной почты» в разделе «Электронная почта», затем найдите имя хоста «Сервер исходящей почты (SMTP)».

Если это решение не сработало для вас, и вы используете Hostinger, сообщите нам об этом.

Распространенные проблемы электронной почты в Linux и способы их решения

При работе с электронной почтой никогда не знаешь, чего ожидать. Проблемы, с которыми сталкиваются системные администраторы, варьируются от места к месту, от человека к человеку и от сервера к серверу.Однако есть проблемы, которые остаются везде одинаковыми. По моему личному опыту, я видел много проблем с рассылкой по всем направлениям; от миллионов спам-писем, заполняющих почтовую очередь и дисковое пространство сервера (и, в конечном итоге, отключая сервер), до фишинговых писем со взломанных веб-сайтов с приманками, отправляющих электронные письма другим клиентам в той же сети. В этой статье мы рассмотрим типичные проблемы с электронной почтой, которые возникают в мире системного администрирования.

Задержки по электронной почте

Первое, что вы хотите сделать при устранении неполадок с задержкой электронной почты, — это получить информацию, необходимую для устранения неполадок.Наличие информации, необходимой для начала, или, по крайней мере, информации для работы, поможет вам принять обоснованное решение. Допустим, есть электронное письмо, которое не было отправлено получателю или которое было возвращено исходному отправителю. Лучшая информация для начала — это полные заголовки электронного письма, отправленного исходному отправителю. В зависимости от почтового клиента, который вы используете, вы можете получить идентификатор почты из заголовка письма по-разному, но он всегда доступен, независимо от клиента.Когда у вас есть почтовый идентификатор, вы можете искать его в почтовых журналах с помощью следующей команды:

  $ grep 'ИД ПОЧТЫ' / var / log / exim_mainlog
  

Если вы не знакомы с форматированием журналов, вы можете пропустить важную информацию. Чтение выходных журналов — это определенно то, что может потребовать натренированного глаза и станет легче с опытом. Со временем журналы могут служить не только информацией, но и источником истины.

коды ошибок Outlook

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

Неверный HELO: 0x800CCC78

Outlook почти всегда отправляет неверный HELO и, как следствие, должен напрямую аутентифицироваться (в отличие от аутентификации IP из проверки IMAP / POP), чтобы обойти проверку. В этой ситуации вы получаете код ошибки 0x800CCC78. Если эта ошибка возникает из-за того, что клиент отправляет электронное письмо, это результат того, что аутентификация SMTP не настроена или настроена неправильно. Когда пользователь аутентифицирован, большинство проверок SMTP игнорируются.

Официальное описание от Microsoft гласит:

Ваш адрес отправителя должен быть полным адресом электронной почты, а не просто именем пользователя. Пожалуйста, настройте свою учетную запись в Outlook / Outlook Express, чтобы использовать полное имя учетной записи, например [email protected], вместо простого «имени пользователя».

Примечание. Недопустимое сообщение HELO не относится к Outlook. Только код ошибки есть.

Хост не может быть найден: 0x800CCC0D

Полная версия этой ошибки выглядит так:

  Почта хозяина.domain.com 'не может быть найден. Убедитесь, что вы правильно ввели имя сервера. Номер ошибки: 0x800CCC0D
  

Если вы видите эту ошибку, возможно, проблема связана с почтовым сервером, к которому почтовый клиент пытается подключиться. Почтовый сервер может распространять свою запись DNS, неправильно писать или иметь проблемы с разрешением / сетью. Эта проблема требует исследования почтового сервера системным администратором. В качестве альтернативы домену почтового сервера вы также можете использовать IP-адрес почтового сервера.

Ошибка подключения к серверу: 0x800CCC0E

Эта ошибка означает, что существует проблема с входящим портом: порт 110 следует использовать для POP3, а порт 143 следует использовать для IMAP. Отдельные порты используются для безопасных соединений, требующих SSL. Эта информация более подробно рассматривается в «Руководство системного администратора по настройке почтового сервера ».

Произошла неизвестная ошибка: 0x800CCC69

Полная версия этой ошибки выглядит так:

  Произошла неизвестная ошибка.Тема 'test', Учетная запись: 'mail.domain.com', Сервер: 'mail.domain.com', Протокол: SMTP, Ответ сервера: '550 Внешние MTA должны быть аутентифицированы для отправки электронной почты', Порт: 25, безопасность (SSL): нет, ошибка сервера: 550, номер ошибки: 0x800CCC69
  

В этой ошибке указано, что агент передачи почты должен быть аутентифицирован для отправки электронной почты. Это связано с тем, что почтовые клиенты и серверы должны проверять источник и места назначения, чтобы не быть помечены как потенциальный спам. Для этого серверу или клиенту исходящей почты необходимо включить аутентификацию, которую можно настроить в почтовом клиенте.Конкретные настройки для Outlook можно найти здесь.

Угадайте, какая ошибка: 0x800CCC67

Этот код ошибки непростой, так как он может означать несколько разных вещей. Если вы используете порт 25 для SMTP, он может быть заблокирован. Почтовые службы и интернет-провайдеры часто блокируют их. Проблема также может заключаться в другом брандмауэре, который установлен локально на рабочей станции отправителя и блокирует SMTP-соединения. Или Outlook может быть просто неправильно настроен. Чтобы найти виновника, нужно просто устранить неполадки.

Ошибки брандмауэра SMTP

В большинстве общих сред порты 25 и 26 заблокированы для пользователей без полномочий root для предотвращения злоупотреблений. Это включает, но не ограничивается, сценарии рассылки спама, отправляющие чрезмерное количество электронной почты с сервера (что приводит к занесению в черный список серверов или IP-адресов), а также проблемы с доставкой электронной почты для всех клиентов на машине.

Есть несколько способов обойти эту проблему:

  1. Используйте вместо этого двоичный файл Sendmail или PHPMailer.
    Вместо этого вы можете использовать двоичный файл Sendmail или PHPMailer.В некоторых случаях при использовании этого параметра вам потребуется специально установить параметр FROM в конверте SMTP. В противном случае отправителем будет адрес электронной почты сервера по умолчанию, а не правильный.
  2. Используйте IP-адрес домена или сервера в качестве имени хоста и порт 26 в качестве исходящего порта.
    Эта установка требует аутентификации электронной почты для SMTP-сервера и входа в систему с именем пользователя и паролем. Здесь также рекомендуется установить параметр FROM. Заголовок FROM — это то, что обычно видит получатель (если только получатель не выбирает просмотр полных заголовков).
  3. Добавить пользователя в белый список брандмауэра.
    Вы можете добавить пользователя или IP-адрес в белый список через брандмауэр. Эта тактика рекомендуется только как как последнее средство . После добавления правил рекомендуется перезапустить брандмауэр. Добавление пользователя или IP-адреса через брандмауэр позволит им подключаться к любому хосту на доступных исходящих портах, например 25 и 26.

По этому адресу такого человека нет

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

Отказ SPF

Входящая электронная почта обычно проверяется на наличие допустимой записи структуры политики отправителя (SPF), если для адреса назначения включена проверка подлинности. Нейтральные или неудачные проверки SPF приводят к отказу, которые также могут иметь настраиваемые сообщения, такие как ошибки «Нет такого человека».Все сообщения об отказе можно настроить. SPF используется для указания почтовому обмену, какие хосты авторизованы для отправки почты для домена. Запись легко создать, и она хорошо работает. Существуют панели управления, которые позволяют вам создать такую ​​запись с помощью удобного для пользователя инструмента, или вы можете создать ее с помощью онлайн-инструмента или создать запись из памяти.

Электронная почта / пересылка

Каналы электронной почты должны начинаться с двоичного кода PHP (например, / usr / local / bin / php ). Этот процесс отправляет сообщение электронной почты программе и добавляет сообщение в файл почтового ящика с доставкой в ​​реальном времени.Как и в случае с возможностью настройки отклонения SPF, у вас есть дополнительные возможности для настройки каналов электронной почты и того, как они будут работать. Эта тактика зависит от того, где расположен почтовый сервер.

Заключение

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

[Хотите узнать больше о сетевых технологиях? Ознакомьтесь со шпаргалкой по сети Linux. ]

Учебное пособие по PHPMailer | CodeForGeek

PHP имеет встроенную функцию mail () для отправки электронной почты прямо из кода. Это тоже удобно и эффективно, но у него есть одна серьезная проблема. Это дает нагрузку на рабочий сервер, а также не дает никаких гарантий доставки электронной почты.

PHPMailer — одна из популярных и простых в использовании почтовых библиотек для php.Это решает проблему производственной нагрузки и гарантии доставки электронной почты, позволяя нам настроить SMTP-сервер.

Как им пользоваться?

Для вашего удобства я создал специальную функцию, которая, конечно же, использует PHPMailer и SMTP. Вот функция.

require_once (‘class.phpmailer.php’);
function sendmail ($ to, $ subject, $ message, $ name)
{
$ mail = new PHPMailer ();
$ body = $ message;
$ mail-> IsSMTP ();
$ mail-> SMTPAuth = true;
$ mail-> Host = «smtp.gmail.com «;
$ mail-> Port = 587;
$ mail-> Username =» [email protected] «;
$ mail-> Password =» ваш пароль Gmail «;
$ mail-> SMTPSecure = ‘ tls ‘;
$ mail-> SetFrom (‘[email protected]’, ‘Ваше имя’);
$ mail-> AddReplyTo («[email protected]», «Ваше имя»);
$ mail-> Subject = $ subject;
$ mail-> AltBody = «Любое сообщение.»;
$ mail-> MsgHTML ($ body);
$ address = $ to;
$ mail-> AddAddress ($ address, $ name);
if (! $ Mail-> Send ()) {
return 0 ;
} else {
return 1;
}
}
?>

Для использования вам понадобятся два файла: class.phpmailer.php и class.smtp.php . Вы можете загрузить и скопировать эти два файла по приведенной ниже ссылке.

Внешняя ссылка: Загрузите библиотеку PHPMailer.

После загрузки поместите эти два файла плюс один, содержащий вышеуказанную функцию. Вот ссылка на файл.

Внутренняя ссылка: Загрузите пользовательскую функцию phpmailer.

включить («sendmail.php»);
$ to = «электронная почта»;
$ subject = «Привет»;
$ message = «привет, , как дела. «;
$ name = «Шахид Шейх»;
$ mailsend = sendmail ($ кому, $ тема, $ сообщение, $ имя);
if ($ mailsend == 1) {
echo ‘

электронное письмо отправлено.

‘;
}
else {
echo ‘

Возникла проблема.

‘;
}
?>

Исследование производительности:

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

Итак, я изменил его на PHPMailer, и после использования приложения Google smtp я могу отправлять электронную почту в течение 3 секунд вверху.Сокращение на 27 секунд и гарантированная доставка электронной почты.

Дальнейшее изучение:

Как сделать так, чтобы мой PHP отправлял почту?

Из почтового мануала php:

Требования

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

Это означает, что вам нужно установить какой-то почтовый сервер и настроить php для его использования.Обычно этот почтовый сервер является постфиксным в Ubuntu. Однако — если сторона php, которую вы кодируете, в конечном итоге будет сохранена на стороне службы хостинга (например, xmission), почтовый сервер, скорее всего, уже будет там установлен. В этом случае просто протестируйте свой сайт онлайн, а не локально.

Если вам нужно протестировать его в своей системе или вы хотите разместить его на собственном домашнем сервере, выполните:

Установка: postfix / sudo apt-get install postfix
Во время процесса вас спросят, в каком режиме вы хотите установить postfix.Возможны четыре режима:

  • Интернет : Ваш собственный почтовый сервер.
  • Satellite : для отправки и получения почты будет использоваться внешний почтовый провайдер (например, Google). Сервер не будет получать почту.
  • Smarthost : смесь двух. Почта хранится локально, но отправляется через внешнего почтового провайдера.
  • Только местные : Вас не коснутся. Это системный почтовый сервер для стажеров. Вы можете отправлять почту только от пользователя к пользователю в системе.

Остальные варианты установки зависят от вашего выбора этой общей конфигурации.

Скорее всего, вы выберете спутниковую установку. Это означает, что почта будет отправляться через внешнего провайдера. В качестве smtp-сервера (сервера исходящей почты) вам нужно будет указать smtp вашего провайдера. Остальные параметры говорят сами за себя.

Конфигурация после установки

Большинство smtp-серверов требуют аутентификации по паролю для отправки почты. Таким образом, postfix нужно будет знать этот пароль.Также нужно учитывать такие вещи, как шифрование (которое вам придется погуглить). Вот как вы настраиваете постфикс с использованием аутентификации по паролю (sasl):

  • Установить
    libsasl2-modules и
    sasl2-bin
    щелкнув значки Центра программного обеспечения или из терминала, используя:

      sudo apt-get install libsasl2-2 libsasl2-modules sasl2-bin
      
  • Включите sasl-auth, добавив эти строки в /etc/postfix/main.cf

      # добавить в / etc / postfix / main.ср
     smtp_sasl_auth_enable = да
     smtp_sasl_security_options = noplaintext noanonymous
     smtp_sasl_password_maps = хеш: / etc / postfix / sasl_password
      
  • Создайте файл / etc / postfix / sasl_password со строкой вида:

      smtp.gmail.com ИМЯ ПОЛЬЗОВАТЕЛЯ@gmail.com: ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ
      

    Замените фактический пароль, имя пользователя и smtp-адрес.

  • Постфикс обновления:

      sudo chmod 600 / etc / postfix / sasl_password # для безопасности вашего пароля smtp
     хеш sudo postmap: / etc / postfix / sasl_password
     sudo postmap / etc / postfix / sender_canonical
     sudo / etc / init.d / postfix перезапуск
      

    Возможно, вам придется заранее обойти ошибку «доступ запрещен» с помощью chown postfix: postfix / etc / postfix .

Это должно сработать в большинстве случаев. Тем не менее, некоторые провайдеры smtp требуют определенного адреса в качестве отправителя или шифрования.

По теме: Интерфейс PEAR :: Mail также может вас заинтересовать.

Gmail (и, возможно, другим службам) может не понравиться, что вы пытаетесь отправить почту таким образом, поскольку это может быть сочтено небезопасным по их стандартам и заблокирует вашу попытку i.е. на экране ничего не произойдет, или в каком-то месте весь процесс заблокирует вашу аутентификацию. Также ваш POP3 должен быть включен.

Чтобы противостоять этому, см. Здесь. (Если вы хотите быть в безопасности, создайте фиктивную учетную запись Gmail)

Просто, но работает | Как отправить электронную почту с помощью PHP на вашем локальном сервере / сервере | Автор: Chalid Ade Rahman

Фотография Kate Macate на Unsplash

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

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

  1. Установить Xampp | вы можете скачать здесь, убедитесь, что вы загрузили Xampp с PHP выше v5.3
  2. Текстовый редактор | вы можете использовать atom, vscode, notepad ++
  3. , если вы используете Linux, убедитесь, что вы установили сервер apache
  • Для отправки электронной почты мы будем использовать приложение в Windows под названием sendmail , которое обычно включается в установку xampp.Вы можете проверить, открыв папку установки xampp. обычно на C: \ xampp \ , тогда проверьте, существует ли папка sendmail или нет.
  • Если папки не существует, скачайте sendmail.zip . Откройте папку установки xampp (обычно на C: \ xampp \ ), затем создайте папку с именем « sendmail ».
  • Распакуйте sendmail.zip в эту папку. затем откройте файл sendmail.ini
  • Настройте его следующим образом:
  1. smtp_server = smtp.gmail.com
  2. smtp_port = 465
  3. smtp_ssl = ssl
  4. default_domain = localhost
  5. error_logfile = error.log
  6. debug_logfile = debug.log
  7. auth_username = [your_gmail_account_username] [имя_пользователя_пользователя почты] = [пароль_пользователя_для_пользователя почты]
  8. pop3_server =
  9. pop3_username =
  10. pop3_password =
  11. force_sender =
  12. force_recipient =
  13. hostname = localhost

Вам не нужно указывать какое-либо значение для этих свойств: pop3_server, pop3_username, pop3_username, pop3_username, pop3_username force_recipient. Убедитесь, что error_logfile и debug_logfile оставлены пустыми, если вы уже отправляли электронные письма. Включите этот журнал, чтобы узнать, не можете ли вы отправлять электронную почту с помощью sendmail .

  • Не забудьте сохранить,
  • Теперь мы устанавливаем конфигурацию электронной почты на php.ini в нашу конфигурацию выше. Давайте откроем ваш xampp и нажмем настроить php.ini
  • После открытия php.ini, используйте поиск и введите почтовая функция , которую вы направите в эту строку,
  • Добавление новой конфигурации, как показано на рисунке ниже

sendmail_path = «C: \ xampp \ sendmail \ sendmail.exe -t -i ”

  • Готово, давайте создадим новый файл PHP и настроим следующим образом:

. Вы можете изменить значение этих переменных по своему усмотрению. Тогда сохраните и давайте попробуем.

  • Откройте в браузере и посмотрите, о чем идет речь.Если вы получили это сообщение, вы успешно выполняете эту практику.

Давайте проверим электронную почту, вы можете увидеть вот так.

да ты сделал это. Но если вы получили это сообщение. Вам нужно перейти к устранению неполадок на этой странице.

Каждая проблема, связанная с отправкой электронной почты с использованием PHP, будет сохраняться в 3 файлах, отладка , сбой, ошибка , но для облегчения чтения вы можете открыть файл error.txt , и вы получите сообщение.

  1. Эта ошибка обычно возникает, если вы заполняете auth_username и auth_password в sendmail.ini с неправильным значением. Перепроверьте и снова запустите.
  2. Если вы убедитесь, что ваш адрес электронной почты и пароль верны, то откройте эту ссылку. Не забудьте сначала открыть электронную почту. вы попадете в эту справку Gmail.