Я написал следующую пользовательскую функцию PHP для отправки почты через SMTP MAIL SERVER.
function send($format = 'text'){ $smtpServer = 'mail.mymailserver.com.mx'; $port = '25'; $timeout = '60'; $username = 'myuser'; $password = 'mypassword'; $localhost = 'www.mydomain.com.mx'; $newLine = "\r\n"; $smtpConnect = fsockopen( $smtpServer, $port, $errno, $errstr, $timeout ); fputs( $smtpConnect,'AUTH LOGIN'.$newLine ); fputs( $smtpConnect, base64_encode( $username ) . $newLine ); fputs( $smtpConnect, base64_encode( $password ) . $newLine ); fputs( $smtpConnect, 'HELO ' . $localhost . $newLine ); fputs( $smtpConnect, 'MAIL FROM: ' . $this->from . $newLine ); fputs( $smtpConnect, 'RCPT TO: ' . $this->to . $newLine ); if( !empty( $this->cc ) ){ fputs( $smtpConnect, 'RCPT TO: ' . $this->cc . $newLine ); } if( !empty( $this->bcc ) ){ fputs( $smtpConnect, 'RCPT TO: ' . $this->bcc . $newLine ); } fputs( $smtpConnect, 'DATA' . $newLine ); fflush( $smtpConnect ); $raw = ""; $raw = @fread( $smtpConnect, 255 ) . "@"; $raw .= @fread( $smtpConnect, 255 ); fputs( $smtpConnect, 'To: ' . $this->to . $newLine ); fputs( $smtpConnect, 'From: <' . $this->from .'>' . $newLine ); fputs( $smtpConnect, 'Subject:' . $this->subject . $newLine ); $format = 'html'; if( $format == 'text' ){ $headers = "Content-Type: text/plain; charset=\"iso-8859-1\"" . "\r\n"; $headers .= "Content-Transfer-Encoding: 7bit" . "\r\n"; $message = $this->bodyText(); fputs( $smtpConnect, $headers . $newLine . $newLine ); fputs( $smtpConnect, $message . $newLine . '.' . $newLine ); }else{ $random_hash = md5(date('r', time())); $headers = "Content-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\"\r\n"; $headers .= "--PHP-alt-" . $random_hash . "\r\n"; $headers .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . "\r\n"; $headers .= "Content-Transfer-Encoding: 7bit" . "\r\n"; $message = $this->bodyText(); fputs( $smtpConnect, $headers . $newLine ); fputs( $smtpConnect, $message . $newLine ); $headers = "--PHP-alt-" . $random_hash . "\r\n"; $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"" . "\r\n"; $headers .= "Content-Transfer-Encoding: 7bit" . "\r\n"; $message = $this->bodyHtml(); fputs( $smtpConnect, $headers . $newLine ); fputs( $smtpConnect, $message . $newLine ); $headers = "--PHP-alt-" . $random_hash . "--\r\n"; fputs( $smtpConnect, $headers . '.' . $newLine ); } fputs( $smtpConnect,'QUIT' . $newLine ); return true; }
Функция работала очень хорошо, но в последние дни я получал следующие ошибки php:
Обратите внимание: fputs () [function.fputs]: ошибка отправки 8192 байт с errno = 32 Разбитая труба в /cakeapp/trunk/app/controllers/components/email.php в строке 165
Обратите внимание: fputs () [function.fputs]: ошибка 49 байтов с ошибкой = 32 Разбитая труба в /cakeapp/trunk/app/controllers/components/email.php в строке 169
Обратите внимание: fputs () [function.fputs]: ошибка отправки 6 байтов с errno = 32 Разбитая труба в /cakeapp/trunk/app/controllers/components/email.php в строке 182
Я искал в Google некоторые предложения, но информация, которую я нашел, рассказывала о проблеме, связанной с отключением времени соединения!
Может ли кто-нибудь предложить способ устранить эту проблему?
У меня была та же проблема, и я нашел решение, установив протокол «mail» (конечно, это не тот случай, когда вам всегда нужно использовать «почту» в качестве протокола, я использовал «smtp» в качестве протокола на другом веб-сайте и отлично работает, но тот же код, который я скопировал и вставил на какой-то другой сайт, и не работал, поэтому мне пришлось изменить его на «почту»). Моя конфигурация образца выглядит так (замените слова верхнего регистра своими собственными учетными данными):
'protocol' => 'mail', 'smtp_host' => 'mail.YOUR_WEBSITE_DOMAIN.com.au', 'smtp_port' => 25, 'smtp_user' => 'YOUR_EMAIL_ACCOUNT@YOUR_WEBSITE_DOMAIN.com.au', 'smtp_pass' => 'YOUR_PASSWORD_FOR_YOUR_EMAIL_ACCOUNT', 'smtp_timeout' => 5,// The default value 'mailtype' => 'html' //default: text
http://tools.ietf.org/html/rfc2045 Закодированные строки должны содержать не более 76 символов, не считая завершающего CRLF. Если в поступающих закодированных данных обнаружены более длинные строки, надежная реализация может тем не менее декодировать строки и может сообщать пользователю ошибочную кодировку.
Итак, если у вас была такая же проблема, попробуйте «chunk_split»! Например: $ message = chunk_split ($ message)