【问题标题】:use php mail function on ovh shared hosting windows server在 ovh 共享主机 windows 服务器上使用 php 邮件功能
【发布时间】:2013-10-17 21:46:06
【问题描述】:

使用php mail()函数发送邮件失败。

我想使用我在托管时拥有的邮件地址:postmaster@my_domain.com。

托管是使用 Windows 服务器的“个人”服务。

在使用邮件功能之前需要在php上做一些配置吗?

我可以访问 php.ini 吗?

或者在 ovh 管理器中检查/取消检查。

我在谷歌上搜索并尝试了一些解决方案,但我发现了很多东西,我不知道什么有用或没有用。

我也已向 OVH 技术支持发送请求,但仍在等待答复。

现在,我编写了一个非常基本的脚本来测试该功能,但它不发送邮件:

<?php
$headers ='From: postmaster@my_domain.com'."\n";
$headers .='Reply-To: postmaster@my_domain.com'."\n";
$headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
$headers .='Content-Transfer-Encoding: 8bit';
if( mail('valid_destination_adress@gmail.com', 'test mail', 'Message of the mail', $headers) ){
    echo 'ok';
}else{
    echo 'erreur';
}
?>

【问题讨论】:

  • 您是否有错误或没有收到电子邮件?
  • 是的,我有一个错误。但就像邮件函数返回真或假一样,我只有假。没有关于问题的详细信息。
  • 尝试在脚本顶部添加error_reporting(E_ALL|E_STRICT);ini_set('display_errors', 1);,看看是否有更多细节
  • 它说:警告:mail():无法连接到“localhost”端口 25 的邮件服务器,验证 php.ini 中的“SMTP”和“smtp_port”设置或使用 ini_set() 所以,这是我的假设,我必须在使用 mail() 之前配置一些设置
  • 你的邮件服务器安装有效吗?

标签: php email windows-server


【解决方案1】:

我推荐你使用 Swiftmailer (http://swiftmailer.org/)

发送电子邮件就像下载库一样简单,解压缩,包含主 .php 文件,例如以下代码行:

require 'lib/swift_required.php';

$transport = Swift_SmtpTransport::newInstance('smtp.gmail.com', 465, "ssl")
  ->setUsername(SENDER_USERNAME)
  ->setPassword(SENDER_PASSWORD);


$mailer = Swift_Mailer::newInstance($transport);

$message = Swift_Message::newInstance($subject)
  ->setFrom(array(MAIL_FROM))
  ->setTo(array(MAIL_TO))
  ->setBody($message);

$result = $mailer->send($message);

如您所见,配置您的 smtp 服务器或现有邮件提供的配置应该很简单,如 gmail 示例所示。

【讨论】:

    【解决方案2】:

    警告:mail():无法在“localhost”端口 25 连接到邮件服务器,请验证 php.ini 中的“SMTP”和“smtp_port”设置或使用 ini_set()

    这意味着由于 localhost 正在尝试发送邮件。但是 ovh 提供了一个特定的邮件域:smtp.mydomain.com。所以你必须使用ini_set(),因为你不能改变共享主机上的php.ini

    ini_set("SMTP", "smtp.mydomain.com");
    ini_set("sendmail_from", "postmaster@mydomain.com");
    
    $headers ='From: postmaster@my_domain.com'."\n";
    $headers .='Reply-To: postmaster@my_domain.com'."\n";
    $headers .='Content-Type: text/plain; charset="iso-8859-1"'."\n";
    $headers .='Content-Transfer-Encoding: 8bit';
    
    if (
        mail(
            'valid_destination_adress@gmail.com', 
            'test mail', 
            'Message of the mail', 
            $headers
        ) 
    ){
        echo 'ok';
    } else {
        echo 'erreur';
    }
    echo "Check your email now....<br/>";
    

    但我建议为此使用库,例如​​ SwiftMailerPHPMailer

    【讨论】:

    • 我工作!!谢谢,因为我喜欢这个网站。我可以学习很多东西而不会浪费几天时间来搜索和排序谷歌结果。更多,答案非常快,不像 ovh 支持。我将尝试使用 PHPMailer,但我现在已经有了一个可行的解决方案。
    【解决方案3】:

    您的代码看起来是正确的,所以这肯定不是 PHP 问题,除非该函数没有被停用。如果您有访问权限,您应该检查 SMTP 服务器的日志。或者,您可以尝试使用一个小型 PHP 库来发送邮件,大多数已知库都提供了出色的异常处理和日志记录可能性,

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    • 2013-07-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2017-01-24
    • 1970-01-01
    相关资源
    最近更新 更多