簡體   English   中英

使用PHP PEAR發送電子郵件,但無法向smtp服務器進行身份驗證

[英]Send email using PHP PEAR but unable to authenticate to smtp server

我正在嘗試從我的網頁發送自動電子郵件以進行通知。

這是我的代碼:

    include 'Mail.php';
    include 'Mail/mime.php' ;
    $text = 'Text version of email';
    $html = '<html><body>HTML version of email</body></html>';
    $file = 'bg.jpg';
    $crlf = "\n";

    $hdrs = array(
                  'From'    => 'myuser@myhost.com',
                  'Subject' => 'Test mime message function'
                  );
    $mime = new Mail_mime($crlf);

    $mime->setTXTBody($text);
    $mime->setHTMLBody($html);
    $mime->addAttachment($file, 'image/jpeg');

    $isi = $mime->get();
    $hdrs = $mime->headers($hdrs);

    $host = "myhost.com";
    $port = "587";
    $SMTPSecure="tls";
    $username = "myuser@myhost.com";
    $password = "mypass";

    $smtp = Mail::factory('smtp', array('host' => $host,'port' => $port, 'auth' => true, 'debug' => true,
            'username' => $username, 'password' => $password, 'SMTPSecure'=>$SMTPSecure));
    $mail = $smtp->send('myOtherUser@myhost.com', $hdrs, $isi);

    if (PEAR::isError($mail)) {
           $msg="<p>error = " . $mail->getMessage() . "</p>";
    }

當我在本地主機( 適用於Windows的XAMPP 1.7.3,PHP版本5.3.1 )中對其進行測試時,它可以完美地工作。 但是,將其上傳到服務器( 適用於Linux的XAMPP 1.6.5a,PHP版本5.2.5 )后,它將無法正常工作。 這是調試結果:

DEBUG: Recv: 220 SR-HO-MX01.myhost.com Microsoft ESMTP MAIL Service ready at Wed, 4 Mar 2015 15:57:26 +0700
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-SR-HO-MX01.myhost.com Hello [114.4.68.107]
DEBUG: Recv: 250-SIZE 10485760
DEBUG: Recv: 250-PIPELINING
DEBUG: Recv: 250-DSN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250-STARTTLS
DEBUG: Recv: 250-AUTH GSSAPI NTLM
DEBUG: Recv: 250-8BITMIME
DEBUG: Recv: 250-BINARYMIME
DEBUG: Recv: 250 CHUNKING

我嘗試將端口更改為465,並將$SMTPSecure設置為ssl,但仍然無法正常工作,並且調試結果相同。

我應該檢查些什么來修理?

我的服務器中的OpenSSL支持設置已啟用。

這是我的本地主機的調試結果

DEBUG: Recv: 220 SR-HO-MX02.myhost.com Microsoft ESMTP MAIL Service ready at Wed, 4 Mar 2015 21:26:09 +0700
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-SR-HO-MX02.myhost.com Hello [223.255.230.52]
DEBUG: Recv: 250-SIZE 20971520
DEBUG: Recv: 250-PIPELINING
DEBUG: Recv: 250-DSN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250-STARTTLS
DEBUG: Recv: 250-AUTH GSSAPI NTLM
DEBUG: Recv: 250-8BITMIME
DEBUG: Recv: 250-BINARYMIME
DEBUG: Recv: 250 CHUNKING
DEBUG: Send: STARTTLS

DEBUG: Recv: 220 2.0.0 SMTP server ready
DEBUG: Send: EHLO localhost

DEBUG: Recv: 250-SR-HO-MX02.myhost.com Hello [223.255.230.52]
DEBUG: Recv: 250-SIZE 20971520
DEBUG: Recv: 250-PIPELINING
DEBUG: Recv: 250-DSN
DEBUG: Recv: 250-ENHANCEDSTATUSCODES
DEBUG: Recv: 250-AUTH GSSAPI NTLM LOGIN
DEBUG: Recv: 250-8BITMIME
DEBUG: Recv: 250-BINARYMIME
DEBUG: Recv: 250 CHUNKING
DEBUG: Send: AUTH LOGIN

DEBUG: Recv: 334 VXNlcm5hbWU6
DEBUG: Send: redacted

DEBUG: Recv: 334 redacted
DEBUG: Send: redacted

DEBUG: Recv: 235 2.7.0 Authentication successful
DEBUG: Send: MAIL FROM:<myuser@myhost.com>

DEBUG: Recv: 250 2.1.0 Sender OK
DEBUG: Send: RCPT TO:<myuser@myhost.com>

DEBUG: Recv: 250 2.1.5 Recipient OK
DEBUG: Send: DATA

DEBUG: Recv: 354 Start mail input; end with <CRLF>.<CRLF>
DEBUG: Send: MIME-Version: 1.0
From: myuser@myhost.com
Subject: Test mime message function
Content-Type: multipart/mixed;
    boundary="=_b2d99c906044c6425cf57f0c2c27b840"

--=_b2d99c906044c6425cf57f0c2c27b840
Content-Type: multipart/alternative;
    boundary="=_ec04c97876af188028fad4b88c471128"

--=_ec04c97876af188028fad4b88c471128
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="ISO-8859-1"

Text version of email
--=_ec04c97876af188028fad4b88c471128
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="ISO-8859-1"

<html><body>HTML version of email</body></html>
--=_ec04c97876af188028fad4b88c471128--

--=_b2d99c906044c6425cf57f0c2c27b840
Content-Transfer-Encoding: base64
Content-Type: image/jpeg;
 name="bg.jpg"; 
Content-Disposition: attachment;
 filename="bg.jpg"; 

    /9j/4AAQSkZJRgABAgAAZABkAAD/7AARRHVja3kAAQAEAAAAZAAA/+4ADkFkb2JlAGTAAAAAAf/b
[....]
--

.


dc
DEBUG: Recv: 250 2.6.0 <98090985-136c-4479-9cdc-63b43c6f5042@SR-HO-MX01.sariroti.com> [InternalId=47017006989399] Queued mail for delivery
DEBUG: Send: QUIT

DEBUG: Recv: 221 2.0.0 Service closing transmission channel

更新:我嘗試從我的服務器使用gmail用戶發送電子郵件,並且可以正常工作。 所以我認為問題出在我的主機和端口上。 但是如何檢查呢?

Net/SMTP.php僅在您使用PHP 5.1.0+且已加載openssl擴展Net/SMTP.php支持STARTTLS:

    if ($tls && version_compare(PHP_VERSION, '5.1.0', '>=') &&
        extension_loaded('openssl') && isset($this->_esmtp['STARTTLS']) &&
        strncasecmp($this->host, 'ssl://', 6) !== 0) {

您說已啟用SSL,但請在服務器上運行包含以下內容的腳本:

<?php var_dump(extension_loaded('openssl')); ?>

以與開始發送郵件相同的方式取消安裝。 它應該輸出boolean(true)

因此,最后我使用PHPMailer更改了方法,一切都可以正常工作。盡管如此,仍然不了解PEAR的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM