php邮件脚本,允许用户定义电子邮件将发送到的目标地址

时间:2013-08-06 04:46:44

标签: php

好的,所以我有一个基本的表单和电子邮件脚本,我为网站联系表单写了。 出于其他目的,我想将此脚本修改为,从联系表单中,允许用户定义将电子邮件发送到的位置。我已经尝试了几种方法并且没有任何运气。

HTML:

<form action='/mail.php' id='contact-form' method='post'>
  <p>
    <label for='cf_name'>Name to send emails as *</label>
      <input id='cf_name' name='cf_name' placeholder='Enter your "name"...' required='required' title='Name' type='text' />
  </p>
  <p>
    <label for='cf_email'>Email address to be sent to *</label>
      <input id='cf_email' name='cf_email' placeholder='Email address...' required='required' title='Email address' type='email' />
  </p>
  <p>
  <label for='cf_subject'>Message Title *</label>
    <input id='cf_subject' name='cf_subject' placeholder='Email Subject...' required='required' title='Email Subject' type='text' />
  </p>
  <p>
    <label for='cf_message'>Message *</label>
      <textarea id='cf_message' name='cf_message' placeholder='Message text...' required='required' rows='10' title='Message text'></textarea>
  </p>
  <p>
    <input type='submit' value='Send message' />
  </p>
</form>

目前半编辑的PHP:

<?php

// Destination email address
define('EMAIL_DEST', 'abc@123.com');

// Contact form error message
define('ERROR_MESSAGE', 'Something went wrong, please try to submit later.');

// Contact form message title
define('CONTACT_EMAIL_TITLE', '');

// Contact form success message
define('CONTACT_SUCCESS_MESSAGE', 'Thank you! We will get back to you as soon as possible.');


// Variables assignment
$name         = isset($_POST['cf_name']) ? $_POST['cf_name'] : '';
$email        = isset($_POST['cf_email']) ? $_POST['cf_email'] : '';
$subject      = isset($_POST['cf_subject']) ? $_POST['cf_subject'] : '';
$message      = isset($_POST['cf_message']) ? $_POST['cf_message'] : '';


// Send email if required fields are filled
if(!empty($name) && !empty($email) && !empty($subject) && !empty($message)) {
    // Headers
    $headers  = 'MIME-Version: 1.0' . "\r\n";
    $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
    $headers .= 'From: ' . $name;

// Message title
$message_title = CONTACT_EMAIL_TITLE;

// Message
$message_body = "$message";

// Send mail
mail(EMAIL_DEST, $message_title, $message_body, $headers);


// Show success message
echo '<div class="box-success round-3"><div class="box-content"><p>' . CONTACT_SUCCESS_MESSAGE . '</p></div></div>';
exit;
} else {
    // Show error message
    echo '<div class="box-error round-3"><div class="box-content"><p>' . ERROR_MESSAGE . '</p></div></div>';
    exit;
}

3 个答案:

答案 0 :(得分:1)

您正在定义

/ Destination email address
define('EMAIL_DEST', 'abc@123.com');

然后通过以下方式将电子邮件发送到此地址:

// Send mail
mail(EMAIL_DEST, $message_title, $message_body, $headers);

因此,如果您想将电子邮件发送到提供的电子邮件地址,请使用

// Send mail
mail($email, $message_title, $message_body, $headers);

因为已经定义了电子邮件地址:

$email = isset($_POST['cf_email']) ? $_POST['cf_email'] : '';

答案 1 :(得分:0)

我不知道EMAIL_DEST在这里是什么..你必须在某处定义它。

如果你看一下邮件功能

bool mail ( string $to , string $subject , string $message [, string $additional_headers [, string $additional_parameters ]] )

第一个字符串是to

所以,我很确定你需要在邮件功能中添加$ email而不是EMAIL_DEST,以便将其发送给特定用户

 mail($email , $message_title, $message_body, $headers);

答案 2 :(得分:0)

我认为问题出在你的Mail Header

// Headers
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
$headers .= 'From: ' . $email;

From中的Mail Header应该是电子邮件地址而不是名称。

或者你可以用这种方式指定名称

$headers .= 'From: ' . $name . '<' .$email. '>'; //From: Birthday Reminder <birthday@example.com>

修改

但您还需要像其他人一样在$to函数中指定mail参数

mail($email , $subject, $message, $headers);