Использование Gmail SMTP для отправки электронной почты с PHP - PullRequest
4 голосов
/ 22 апреля 2011

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

Я немного новичок в PHP и многих вещах, которые я прошу (использую его в течение последних нескольких месяцев).Позвольте мне добраться до сути проблемы:

Я нахожусь в школьной сети с моим собственным сервером, установленным в моей комнате в общежитии.Я создаю веб-сайт, на котором мне нужно проверить электронную почту пользователя, но базовая функция PHP mail () не работает.Мне сказали, что мне нужно будет использовать SMTP.Поэтому я решил, что самый простой и дешевый способ - использовать Gmail SMTP.По этой причине я создал учетную запись в Gmail с именем verify.impressions@gmail.com.Вот код.

echo "starting mail sending";
             require_once("pear/share/pear/Mail.php");

echo "1";

$from = "PersonA `<someone@gmail.com`>";   $to = "`<someoneElse@email.com`>";   $subject = "Activate your account";   $body = "Hey";  

$host = "ssl://smtp.gmail.com";   $port = "465"; //also tried 587   $username = "someone@gmail.com";   $password = "password";  

echo "2";

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

echo "3";

$mailer_params['host'] = $host;   $mailer_params['port'] = $port;   $mailer_params['auth'] = true;   $mailer_params['username'] = $username;   $mailer_params['password'] = $password;                                              
                 $smtp = Mail::factory('smtp', $mailer_params);

echo "4";

error_reporting(E_ALL);

echo "5";

if (PEAR::isError($smtp)) {   die("Error : " . $smtp->getMessage()); }

echo "6";

$mail = $smtp->send($to, $headers, $body) or die("Something bad happened"); 

echo "7";

if (PEAR::isError($mail)) {echo($mail->getMessage();} else {echo(Message successfully sent!);}
                 echo "mail sent hopefully.";

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

$mail = $smtp->send($to, %headers, $);

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

Ответы [ 4 ]

3 голосов
/ 23 апреля 2011

Используйте этот класс: http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html

Пример кода, который я использую:

require("smtp/smtp.php");
require("sasl/sasl.php");
$from = 'youraddress@gmail.com';
$to = 'some@email.com';

$smtp=new smtp_class;
$smtp->host_name="smtp.gmail.com";
$smtp->host_port='465';
$smtp->user='youraddress@gmail.com';
$smtp->password='XXXXXXXXX';
$smtp->ssl=1;
$smtp->debug=1;       //0 here in production
$smtp->html_debug=1; //same

$smtp->SendMessage($from,array($to),array(
"From: $from",
"To: $to",
"Subject: Testing Manuel Lemos' SMTP class",
"Date: ".strftime("%a, %d %b %Y %H:%M:%S %Z")
),
"Hello $to,\n\nIt is just to let you know that your SMTP class is working just fine.\n\nBye.\n"));
0 голосов
/ 23 апреля 2011

Я всегда использую это для отправки почты, используя gmail в качестве SMTP-сервера.Очень прост в настройке

0 голосов
/ 23 апреля 2011

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

У вас есть два варианта:

  1. Найдите сервер SMTP, который использует порт, отличный от 25
  2. Используйте официальный SMTP-сервер сети вашей школы. Всегда есть один, так как люди должны отправлять письма.
0 голосов
/ 22 апреля 2011

Если вы используете Linux, я рекомендую настроить postfix на локальном компьютере, и они попросят переадресовать электронную почту через внешнюю службу SMTP, в вашем случае Gmail.

http://bookmarks.honewatson.com/2008/04/20/postfix-gmail-smtp-relay/

Причина в том, что ваш PHP-скрипт может прерваться в случае задержки при контакте с Gmail.Поэтому вы должны использовать Postfix для постановки электронной почты в очередь на локальном сервере, позволить выполнению сценария PHP умереть и доверить Postfix отправку электронной почты через Gmail.

Если вы используете Windows, я уверен, что вы найдете эквивалентПриложение ретрансляции SMTP (должно быть построено как грубое предположение).

...