Проблемы с отправкой электронной почты на SMTP-сервер google (с собственным скриптом php)

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

[data2] => 501 5.5.2 Cannot Decode response o47sm22737144eem.11 

Я сделал ошибку в своем теле письма, т.е. неправильное форматирование? Вот сценарий php:

 // SMTP settings define( 'SMTP_SERVER', "ssl://smtp.gmail.com" ); define( 'SMTP_PORT', '465' ); define( 'SMTP_USER', 'XXX@gmail.com' ); // my gmail account define( 'SMTP_PWD', 'XXX' ); // my gmail password class Mail { public static function send( $smtpServer, $smtpPort, $smtpUser, $smtpPwd, $from, $to, $subject, $message ) { // Establish connection to SMTP server $smtpConn = fsockopen( $smtpServer, $smtpPort ); $smtpLog['connect'] = fgets( $smtpConn ); // In case of success start SMTP communication if ( $smtpConn !== false ) { // Say hello to SMTP fputs( $smtpConn, 'EHLO ' . $_SERVER['SERVER_ADDR'] . NL ); $smtpLog['hello'] = fgets( $smtpConn ); // Require authentication fputs( $smtpConn, 'AUTH LOGIN' . NL ); $smtpLog['auth'] = fgets( $smtpConn ); // Send username fputs( $smtpConn, base64_encode( $smtpUser ) . NL ); $smtpLog['user'] = fgets( $smtpConn ); // Send password fputs( $smtpConn, base64_encode( $smtpPwd ) . NL ); $smtpLog['pwd'] = fgets( $smtpConn ); // Send email from fputs( $smtpConn, "MAIL FROM: <$from>" . NL ); $smtpLog['from'] = fgets( $smtpConn ); // Send email to fputs( $smtpConn, "RCPT TO: <$to>". NL ); $smtpLog['to'] = fgets( $smtpConn ); // Send "the email" fputs( $smtpConn, 'DATA' . NL ); $smtpLog['data1'] = fgets( $smtpConn ); fputs( $smtpConn, "To: <$to>\r\nFrom: <$from>\r\nSubject: $subject\r\n$message\r\n.\r\n" ); $smtpLog['data2'] = fgets( $smtpConn ); fputs( $smtpConn, 'QUIT' . NL ); $smtpLog['quit'] = fgets( $smtpConn ); fclose( $smtpConn ); } return $smtpLog; } } $log = Mail::send( SMTP_SERVER, SMTP_PORT, SMTP_USER, SMTP_PWD, 'XXX@gmail.com', 'XXX@yahoo.com', 'Subject', 'Message' ); print_r( $log ); 

И полный журнал ответов с SMTP-сервера Google:

 [connect] => 220 mx.google.com ESMTP o47sm22737144eem.11 [hello] => 250-mx.google.com at your service, [XX.XX.XX.XX] [auth] => 250-SIZE 35882577 [user] => 250-8BITMIME [pwd] => 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 [from] => 250 ENHANCEDSTATUSCODES [to] => 334 XXX [data1] => 334 XXX [data2] => 501 5.5.2 Cannot Decode response o47sm22737144eem.11 [quit] => 530-5.5.1 Authentication Required. Learn more at 

Solutions Collecting From Web of "Проблемы с отправкой электронной почты на SMTP-сервер google (с собственным скриптом php)"

Человек, вы читаете однострочные ответы, где есть несколько строк.

MULTILINE REPLY :

 250-LINE #1 // lines that have - after ### continue on the next 250-LINE #2 // lines that have - after ### continue on the next 250 LINE #3 // last line has space after ### 

SINGLELINE ОТВЕТЫ :

 220 LINE #1 // one reply with code 220 250 LINE #2 // another reply with code 250 // no ### code is followed by - as that means: not the last line! 

Ваши команды не синхронизированы. Так исправить вот так:

 if($smtpLog['hello'] = fgets( $smtpConn )){ // handle multiline reply while($smtpLog['hello']{4} !== ' '){ $smtpLog['hello'] .= PHP_EOL.fgets( $smtpConn ); } } 

Это относится ко всем ответам, которые вы получаете, но в вашем случае команды прерывают синхронизацию в EHLO .

Попробуйте использовать хороший и проверенный php-класс phpmailer , это круто.