PHP mail() и PHMailer сомневаются
У меня мало сомнений относительно параметров почты в PHP.
Что бы я ни читал, я не могу отправлять почту с локального хоста без SMTP. Это правильно?
Для отправки почты с localhost с помощью функции PHP mail() мне нужно внести несколько изменений в эти два файла. один из них - "php.ini", а другой - "sendmail.ini". изменения, такие как установка smtp_server, порт, имя пользователя и пароль. Эта опция работает для меня отлично, и я отправил письмо с использованием этого. Просто хочу подтвердить, что я следую правильным способом для отправки почты с localhost?
Если мне просто нужно отправлять простые письма, есть ли большая разница между функцией mail () и PHPMailer?
После изменения двух файлов ini (php.ini и sendmail.ini) я использую пример, приведенный на " https://github.com/PHPMailer/PHPMailer" в конце страницы, но этот пример не работает. Я использую тот же SMTP в примере PHPMailer, который я использовал в 'sendmail.ini', но все же он не работает. Но если я закомментирую часть SMTP в примере PHPMailer, который
/*$mail->isSMTP(); // Set mailer to use SMTP $mail->Host = 'smtp1.example.com;smtp2.example.com'; $mail->SMTPAuth = true; // Enable SMTP authentication $mail->Username = 'user@example.com'; // SMTP username $mail->Password = 'secret'; // SMTP password $mail->SMTPSecure = 'tls'; //Enable TLS encryption,
SSLalso accepted $mail->Port = 587; */
тогда он работает отлично. Я не знаю, почему я должен закомментировать SMTP-часть?
Пожалуйста, помогите мне прояснить мои сомнения. заранее спасибо
2 ответа
Что бы я ни читал, я не могу отправлять почту с локального хоста без SMTP. Это правильно?
Вы должны иметь почтовый сервер (например, Linux sendmail
отправлять сообщения. Вы можете использовать встроенный почтовый сервер вашего сервера или подключиться к SMTP. В PHP нет встроенного почтового сервера / "почтальона"
Для отправки почты с localhost с помощью функции PHP mail() мне нужно внести несколько изменений в эти два файла. один из них - "php.ini", а другой - "sendmail.ini". изменения, такие как установка smtp_server, порт, имя пользователя и пароль. Эта опция работает для меня отлично, и я отправил письмо с использованием этого. Просто хочу подтвердить, что я следую правильным способом для отправки почты с localhost?
Это нормально, если вы правильно настроили записи hostname / domain / dns, иначе ваша почта попадет в ящик нежелательной почты / спама. Читайте о записи SPF для получения дополнительной информации.
Если мне просто нужно отправлять простые письма, есть ли большая разница между функцией mail () и PHPMailer?
PHPMailer по умолчанию использует mail()
, PHPMailer это просто приятный и простой интерфейс / слой для mail()
так что вам не нужно писать сложные заголовки почты самостоятельно. В случае STMP phpmailer использует сокеты
После изменения двух файлов ini (php.ini и sendmail.ini) я использую пример, приведенный на " https://github.com/PHPMailer/PHPMailer" в конце страницы, но этот пример не работает. Я использую тот же SMTP в примере PHPMailer, который я использовал в 'sendmail.ini', но все же он не работает. Но если я закомментирую часть SMTP в примере PHPMailer, который
проверить что echo 'Mailer Error: ' . $mail->ErrorInfo;
говорит
Итак, то, что вы написали ранее, верно, если вы хотите отправлять электронные письма с вашего локального компьютера, вам нужен MTA (Mail Transfer Agent).
Вы можете установить Postfix, если вы используете Linux или для Windows, есть хорошие инструменты для создания локального почтового сервера, который перехватывает все ваши локальные письма. Настроить локальный Postfix для перехвата всех входящих писем немного сложнее.
Функция почты по умолчанию из PHP использует sendmail для отправки ваших писем по всему миру. Когда у вас есть библиотеки, такие как PHPMailer или что я предпочитаю SwiftMailer. Тогда у вас есть много функций, таких как отправка через SMTP.
Обычно sendmail перенаправляет ваши электронные письма в существующий MTA. Sendmail - это реликт с первых дней, и большинство программ совместимы с sendmail.
И твои последние вопросы. Если вы закомментируете строку $mail->isSMTP();
затем вы отправляете почту через локальный ретранслятор (sendmail), так что возможно, что вы не установили openssl? и вы не можете подключиться через TLS к вашему серверу SMTP. Вы должны проверить, открыт ли порт 587 и доступен ли он.
Чтобы получить лучшую информацию об ошибках вы можете использовать $mail->ErrorInfo;
чтобы увидеть, что случилось.