0

从 PHP 页面使用 GMail SMTP 服务器发送电子邮件

我正试图让这个工作。根据给定链接中的答案“它是工作代码,所以使用它”。除非它对我不起作用。

尤其是:

<?php

       require_once "Mail.php";

        $from = "<xxxxx.gmail.com>";
        $to = "<xxxxx.gmail.com>";
        $subject = "Hi!";
        $body = "Hi,\n\nHow are you?";

        $host = "smtp.gmail.com";
        $port = "465";
        $username = "xxxxx@gmail.com";
        $password = "*****";

        $headers = array ('From' => $from,
          'To' => $to,
          'Subject' => $subject);
        $smtp = Mail::factory('smtp',
          array ('host' => $host,
            'port' => $port,
            'auth' => true,
            'username' => $username,
            'password' => $password));

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

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

    ?>  <!-- end of php tag-->

产生:

严格标准:非静态方法 Mail::factory() 不应在第 23 行的 F:\xampp\htdocs\test\index.php 中静态调用

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 365 行的 F:\xampp\php\PEAR\Mail\smtp.php 中的不兼容上下文

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 450 行的 F:\xampp\php\PEAR\Net\SMTP.php 中的不兼容上下文

严格标准:不应静态调用非静态方法 PEAR::isError(),假设 $this 来自第 467 行 F:\xampp\php\PEAR\Net\SMTP.php 中的不兼容上下文

虽然 phpinfo() 提供注册的套接字:

tcp、udp、ssl、sslv3、sslv2、tls

但最重要的是,没有发送电子邮件。

4

2 回答 2

0

$from尝试在和中设置正确的电子邮件地址$to

'PeterMorgan@gmail.com' instead of '<PeterMorgan.gmail.com>'

来自 PEAR Mail 文档:

include('Mail.php');

$recipients = 'joe@example.com';

$headers['From']    = 'richard@example.com';
$headers['To']      = 'joe@example.com';
$headers['Subject'] = 'Test message';

$body = 'Test message';

$params = ... // set smtp values here
              // http://pear.php.net/manual/en/package.mail.mail.factory.php

$mail_object =& Mail::factory('smtp', $params);

$mail_object->send($recipients, $headers, $body);
于 2012-07-07T15:52:59.867 回答
0

想通了这个问题。对于GMail,他们在他们的网站上说:

TLS/STARTTLS 端口:587

SSL 端口:465

如果您在发送邮件时遇到问题,但您已确认邮件客户端中的 SMTP 加密已启用,请尝试在不同的端口(465 或 587)上配置您的 SMTP 服务器。

所以我将端口从 465 更改为 587,即使我使用的是 SSL。我不知道为什么这对我有用,但确实如此。

于 2012-07-08T10:52:02.910 回答