2014-10-31 139 views
0

我用这段代码发送邮件。但是,当我将$标头和行添加到$ body时,它停止工作。任何人都可以支持我找到错误或错误吗?用php发送邮件

我将不胜感激支持。

<?PHP 

// Email Address 
$youremail = '[email protected]'; 
$memberemail = $_POST['email']; 

// Register Form 
if (isset($_POST['email']) && isset($_POST['name']) && filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { 

    // Detect & Prevent Header Injections 
    $test = "/(content-type|bcc:|cc:|to:)/i"; 
    foreach ($_POST as $key => $val) { 
     if (preg_match($test, $val)) { 
      exit; 
     } 
    } 

    // Email Format 
    $body = "Hola! $_POST[name]. Gracias por solicitar tu inscripción. \n"; 
    $body .= "Analizaremos tú solicitud y en caso de resultar positiva recibirás un correo de confirmación en las próximas 24 horas. \n\n"; 
    $body .= "Tus datos de solicitud son: \r\n" 
    $body .= "============================ \r\n"; 
    $body .= "Nombre: $_POST[name] \n"; 
    $body .= "eMail: $_POST[email] \n"; 
    $body .= "Empresa: $_POST[telephone] \n"; 
    $body .= "Sector: $_POST[ticket] \n\n"; 
    $body .= "Atentamente, \n"; 
    $body .= "Staff \n\n"; 
    $body .= "NOTA: Para culaquier duda sobre tu proceso de inscripción te recomendamos leer las preguntas frecuentes en el sito web del evento http://www.evento.com"; 

    //Send email 

    $headers = "From: Staff <[email protected]>" . "\r\n" . "Bcc: [email protected]" . "\r\n"; 

    mail("To:" . $memberemail , "Nuevo registro", $body, "From:" . $headers); 

} 

// Subscribe Form 
if(isset($_POST['subscriber']) && filter_var($_POST['subscriber'], FILTER_VALIDATE_EMAIL)) { 
    $data = $_POST['subscriber'] . ";" . "\n"; 
    $ret = file_put_contents('subscribers.txt', $data, FILE_APPEND | LOCK_EX); 
    if($ret === false) { 
     die('Ouch! Al parecer hay un error.'); 
    } 
} else { 
    die('No se pueden enviar los datos.'); 
} 

?> 
+0

为什么不只是使用http://www.tectite.com/formmailpage.php – KnightHawk 2014-10-31 16:13:44

+1

Procura primero revisar ladocumentaciónoficial http://php.net/manual/en/function.mail.php,pero procura buscar otras opciones (libreríasu otros)... tu respuesta ya la dio @Fred -ii- – 2014-10-31 16:22:04

+0

如果您已经看到我的回答,但它没有起作用,我在测试代码时发现了另一个问题,以确定它是否有效(它确实有效),还有一个缺失的分号。请重新载入我的答案以查看编辑。 – 2014-10-31 16:59:26

回答

1

变化$body, "From:" . $headers)$body, $headers)

您已经有了From:在:

$headers = "From: Staff <[email protected]>"... 

加在注释,改变注意到并删除"To:" .

mail("To:" . $memberemail , "Nuevo registro", $body, "From:" . $headers); 

mail($memberemail, "Nuevo registro", $body, $headers); 

邮件会自动将第一个参数作为收件人To:

然而,你可能想用$youremail作为第一个参数和$memberemailFrom:,因为邮件将发送给谁送的人电子邮件,但我会让你决定。

请教手册:


编辑:

存在丢失的分号在下面的行(我忽略)测试你的代码之前:

body .= "Tus datos de solicitud son: \r\n" 
              ^missing semi-colon 

添加它

body .= "Tus datos de solicitud son: \r\n"; 

如果错误报告设置,你会看到下面的解析/语法错误:

Parse error: syntax error, unexpected '$body' (T_VARIABLE) in /server/path/file.php on line (number)

当PHP信号一个行号的解析错误,它通常在一行“之前”,而不是实际的行号本身。

  • 如果你看到在第22行分析错误,则故障很可能是第21行,而不是22

添加error reporting到您的文件(S)的顶部这将帮助找到错误。

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

旁注:错误报告只应在分期完成,并且从不生产。

+1

此外,从收件人参数中删除“收件人:”。 – 2014-10-31 16:14:21

+0

@SetSailMedia啊好抓,谢谢会修改 – 2014-10-31 16:14:54

0

我认为这与以下的事情:在evento.com

  1. 设置SPF记录域允许该IP或子网使用该发件人地址。您可以使用这样的工具:http://www.spfwizard.net/
  2. 在event.com域上添加PTR记录,指向发送主机的IP地址
  3. 删除整个机身并尝试逐行添加(确保基于内容的垃圾邮件过滤器不起作用)
  4. 请注意您的邮件日志,看它是否由MTA和您的智能主机响应代码发出。

你应该指定“停止工作”的意思:是从服务器发出的?它是否落入垃圾箱?它被你的智能主机拒绝了吗?