在ovh共享主机Windows服务器上使用php邮件功能

时间:2013-10-10 08:20:45

标签: php email windows-server

我没有成功使用php mail()函数发送邮件。

我想使用我托管的邮箱地址:postmaster@my_domain.com。

托管是使用Windows服务器的'perso'优惠。

在使用邮件功能之前,是否要对php进行一些配置?

我可以访问php.ini吗?

或者可能在ovh manager中检查/取消选中。

我在谷歌上搜索并尝试了一些解决方案,但我找到了很多东西,我不知道什么是有用的。

我已向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';
}
?>

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我建议你使用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示例中所示。