发送邮件与PHP

时间:2014-10-31 16:10:49

标签: php email

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

我很感激这种支持。

<?PHP

// Email Address
$youremail = 'correo@correo.com';
$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 <contacto@evento.com>" . "\r\n" . "Bcc: admin@evento.com" . "\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.');
}

?>

2 个答案:

答案 0 :(得分:1)

$body, "From:" . $headers)更改为$body, $headers)

您已经拥有From:

$headers = "From: Staff <contacto@evento.com>"...

正如评论中所述,更改并删除"To:" .

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

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

Mail会自动将第一个参数设置为收件人To:

但是,您可能希望将$youremail用作第一个参数,将$memberemail用作From:,因为邮件将发送给发送电子邮件的人,但我会让你决定。

参考手册:


修改

在测试代码之前,下一行(我忽略了)中缺少一个分号:

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

添加

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

如果设置了错误报告,您会看到以下解析/语法错误:

  

解析错误:语法错误,/ server / path / file.php中的意外'$ body'(T_VARIABLE)行号(数字)

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

  • 如果您在第22行看到解析错误,那么错误最有可能在第21行,而不是第22行。

error reporting添加到文件的顶部,这有助于查找错误。

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

// rest of your code

旁注:错误报告应仅在暂存时完成,而不是生产。

答案 1 :(得分:0)

我认为这与以下内容有关:

  1. 在evento.com域上设置SPF记录,以允许此IP或子网使用此发件人地址。您可以使用以下工具:http://www.spfwizard.net/
  2. 在event.com域上添加指向发送主机IP的PTR记录
  3. 删除整个身体并尝试逐行添加(确保基于内容的垃圾邮件过滤器无效)
  4. 观看您的邮件日志,看看它是否是由MTA和您的智能主机响应代码发出的。
  5. 你应该明确你的意思&#34;停止工作&#34;它是从服务器发出的?它落入垃圾箱了吗?它被你的智能主机拒绝了吗?