使用PHP发送邮件并不适合我

时间:2014-11-04 12:28:13

标签: php email

我正在尝试使用PHP发送邮件 但它只是不起作用。我联系了我的IT老师,我认识的一些IT书呆子,工作中的大学,但他们都无法帮助我。我知道stackoverflow上有很多关于这个的问题,这就是为什么我等了这么久才发布这个问题。但我看了所有关于我能找到的PHP的mail()函数的问题,并没有解决我的问题。我非常绝望。

问题在于,使用我的代码创建邮件不起作用,但只使用纯文本功能时它也不起作用。这让我觉得问题必须是服务器端的。我联系了one.com(这是我的网站所在的地方),但他们无法帮助我。他们说mail()函数应该正常工作。他们确实给了我这个:
Sushant: - 邮件主持人:mailout.one.com
Sushant: - 港口:25
Sushant: - 认证:无/假 Sushant: - 安全:无/假 Sushant: - 用户名:您所在域的电子邮件帐户,例如info@mydomain.com
Sushant: - 密码:您的电子邮件帐户的密码

我不知道如何处理这些信息。我确实尝试使用ini_set()函数编辑php.ini文件( mail.add_x_header,mail.log,SMTP,smtp_port,sendmail_from,sendmail_path )中的一些内容。这也没有解决我的问题。

我的完整代码:

(抱歉荷兰语)

$onderwerp = "E-mail adres controlleren";
$bericht ="
U bent succesvol geregistreerd bij theovisser.com.<br>
Nu kunt u alle verstuurde nieuwsbrieven lezen. Ook kunt u<br>
nieuwe nieuwsbrieven meteen zien, nog voordat ze bij op op de mat liggen!<br><br>

Om uw account te activeren moet u alleen nog wel de onderstaande code<br>
invoeren.<br>
E-mail code: " .$_SESSION['controle_code']. "<br><br>

Groeten,<br>
Samuël Visser
";
// Regels in berichten mogen nooit langer zijn als 70 caracters (PHP regel).
// Hiermee worden alle regels die langer als 70 caracters zijn ingekort.
    $bericht = wordwrap($bericht, 70);
// Verstuur de mail
if(!isset($_SESSION['mail_verstuurd']))
{
    if(mail($email,$onderwerp,$bericht)){
        echo 'Er is een mail verstuurd naar uw adres.<BR><BR>';
        $_SESSION['mail_verstuurd']='true';
    }else{
        echo 'Het versturen van de mail is mislukt.<BR><BR>';
    }

}

这根本不起作用。
最奇怪的是,这也不起作用:

mail('samuvisser@gmail.com','test','dit is een test');
你能解决我的问题吗?我真的不知道我做错了什么。

修改:
使用@ojovirtual的建议使用PHPMailer库,我收到以下错误:

2014-11-04 13:27:48连接:打开mailout.one.com:25,t = 300,opt = array()2014-11-04 13:28:10 SMTP错误:连接失败到服务器:连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立的连接失败,因为连接的主机没有回复。 (10060)2014-11-04 13:28:10 SMTP connect()失败。无法发送消息.Mailer错误:SMTP连接()失败

错误中的斜体样式文本是荷兰语,这被翻译成英语。可能与原版英文翻译有点不同。

这是我使用的设置,遵循从one.com获得的数据:

require($main .'PHPMailer-master/PHPMailerAutoload.php');

$mail = new PHPMailer;

$mail->SMTPDebug=3;
$mail->isSMTP();                                        // Set mailer to use SMTP
$mail->Host = 'mailout.one.com';                        // Specify main and backup SMTP servers
$mail->SMTPAuth = false;                                // Enable SMTP authentication
$mail->Username = 'noreply@theovisser.com';             // SMTP username
$mail->Password = 'won't show that here :)';            // SMTP password
$mail->SMTPSecure = 'tls';                              // Enable TLS encryption, `ssl` also accepted
$mail->Port = 25;                                       // TCP port to connect to

$mail->From = 'noreply@theovisser.com';
$mail->FromName = 'Samuël Visser';
$mail->addAddress('samuvisser@gmail.com', 'Sammie gast');       // Add a recipient
//$mail->addAddress('ellen@example.com');                   // Name is optional
//$mail->addReplyTo('info@example.com', 'Information');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');

$mail->WordWrap = 50;                                 // Set word wrap to 50 characters
//$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name
$mail->isHTML(true);                                  // Set email format to HTML

$mail->Subject = 'Here is the subject';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

我使用了PHPMailer页面上推荐的代码 谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

当从PHP脚本发送电子邮件时,各种主机具有不同的限制或要求,因此不能始终使用所有PHPMailer库功能。在这个答案中,我有关于One.com的信息,因为问题表明使用了One.com,我也使用了该主机。

One.com可能的邮件设置

需要按照问题中的说明提供主机,用户名和密码。

允许的身份验证和加密设置取决于所使用的端口,这些都是One.com的替代方案,但技术支持已经验证所有设置目前无法在PHP脚本中使用:

  • 端口25:身份验证false或STARTTLS
  • 端口2525:身份验证false或STARTTLS
  • 端口465:TLS eller SSL
  • 端口587:身份验证false或STARTTLS

在PHP脚本中,只能使用以下内容:

  • 端口25:身份验证错误

在One.com验证的示例代码

如果您用自己的用户名和密码替换用户名和密码,下面您可以看到在One.com服务器上运行的代码。

/*** Prepare email information ***/
require_once "Mail.php";
$from = "USERNAME@YOUR.DOMAIN";
$to = "SOMEONES.MAIL@gmail.com";
$subject = "Testing PHP SMTP mail";
$body = "Hi,\n\nit seems to be working don't you think?";
$headers = array ('From' => $from,   'To' => $to,   'Subject' => $subject,   'Reply-To' => $from);

/*** Send email ***/
$SendMail = new Mail();
$smtp = $SendMail->factory('smtp',array(
'host' => "mailout.one.com",
'port' => 25,
'auth' => false,
'username' => "YOUR_MAIL_USERNAME",
'password' => "YOUR_MAIL_PASSWORD"));
$mail = $smtp->send($to,$headers,$body);

/*** Check for errors ***/
$ErrorCheck = new PEAR;
if ($ErrorCheck->isError($mail)){
    echo("<p>".$mail->getMessage()."</p>");
}else{
    echo("<p>Message successfully sent!</p>");
}
?>