我正在尝试使用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页面上推荐的代码 谢谢你的帮助!
答案 0 :(得分:3)
当从PHP脚本发送电子邮件时,各种主机具有不同的限制或要求,因此不能始终使用所有PHPMailer库功能。在这个答案中,我有关于One.com的信息,因为问题表明使用了One.com,我也使用了该主机。
One.com可能的邮件设置
需要按照问题中的说明提供主机,用户名和密码。
允许的身份验证和加密设置取决于所使用的端口,这些都是One.com的替代方案,但技术支持已经验证所有设置目前无法在PHP脚本中使用:
在PHP脚本中,只能使用以下内容:
在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>");
}
?>