Можно ли установить заголовок "message To:" при отправке электронной почты на PHP? - PullRequest
0 голосов
/ 18 февраля 2012

Это относительно простой вопрос, который может не иметь решения.

Можно ли установить заголовок сообщения в: и отправить письмо на PHP?Обратите внимание, что сообщение To: отличается от конверта To: header.Последний фактически определяет, куда направляется электронная почта, а первый просто определяет, что именно показано в программе электронной почты получателя.

Справочная информация: я настраиваю для себя небольшую одноразовую почтовую службу, поэтому я получаюписьма с PHP-скриптом, с изменением нескольких заголовков и повторной отправкой на мой реальный адрес электронной почты.Я хотел бы, чтобы исходный адрес электронной почты получателя (одноразовый адрес электронной почты) все еще отображался в сообщении, когда я получаю его в своем реальном почтовом ящике (для правил фильтрации на стороне клиента и т. Д.).

Isэто возможно?Я смог изменить любой другой тип заголовка, но этот застрял.

Ответы [ 3 ]

0 голосов
/ 18 февраля 2012

При отправке электронных писем с помощью PHP я всегда использовал пользовательскую функцию, которая использует STMP, и в этой функции он использует следующий заголовок, чтобы задать имя, которое, как я полагаю, вы пытаетесь установить:

"To: $nameto <$emailto>"

Где $ emailto - это фактическое электронное письмо, которое вы отправляете, а $ nameto - это то, для кого вы хотите, чтобы оно отображалось.

Вот функция, которую я использую, если вам нужно изменить какие-либо другие заголовки, которые вы можете изменить, они находятся ближе к концу функции:

/*
    Desc: Used to send emails from stmp server. Make sure to have the config variables set (at the top of function). Stores logs in array, you'll need to modify the function to actually use the array though.
    Params:
        String $from - Email address that the email is from. Ex. "john.smith@example.com"
        String $namefrom - Name to go along with the email address. Ex. "John Smith"
        String $to - Email address of the recipient of the email. Ex, "jane.doe@example.com"
        String $nameto - Name to go along with the email address. Ex. "Jane Doe"
        String $subject - Email subject.
        String $message - Main contents of email.
    Return: true on success false on failure.
*/
function amail($from, $namefrom, $to, $nameto, $subject, $message)
{
    $smtpServer = "";
    $port = 0;
    $username = "";
    $password = "";
    $timeout = 30;
    $localhost = "127.0.0.1";
    $newLine = "\r\n";
    $smtpConnect = fsockopen($smtpServer, $port, $errno, $errstr, $timeout) or die('Could not connect.');
    $smtpResponse = fgets($smtpConnect, 515);
    if(empty($smtpConnect)){
        return false;
    } else {
        $logArray['connection'] = "Connected: $smtpResponse";
    }
    fputs($smtpConnect, "HELO $localhost" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['heloresponse'] = "$smtpResponse";
    fputs($smtpConnect,"AUTH LOGIN" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authrequest'] = "$smtpResponse";
    fputs($smtpConnect, base64_encode($username) . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authusername'] = "$smtpResponse";
    fputs($smtpConnect, base64_encode($password) . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['authpassword'] = "$smtpResponse";
    fputs($smtpConnect, "MAIL FROM: $from" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['mailfromresponse'] = "$smtpResponse";
    fputs($smtpConnect, "RCPT TO: $to" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['mailtoresponse'] = "$smtpResponse";
    fputs($smtpConnect, "DATA" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['data1response'] = "$smtpResponse";
    $headers = "MIME-Version: 1.0" . $newLine;
    $headers .= "Content-type: text/plain; charset=iso-8859-1" . $newLine;
    $headers .= "To: $nameto <$to>" . $newLine;
    $headers .= "From: $namefrom <$from>" . $newLine;
    $headers .= "Subject: $subject" . $newLine;
    fputs($smtpConnect, "$headers\n\n$message\n".$newLine.".".$newLine);
    $smtpResponse = fgets($smtpConnect, 1024);
    $logArray['data2response'] = "$smtpResponse";
    fputs($smtpConnect,"QUIT" . $newLine);
    $smtpResponse = fgets($smtpConnect, 515);
    $logArray['quitresponse'] = "$smtpResponse";
    return true;
}
0 голосов
/ 19 февраля 2012

Спасибо всем за помощь!Я нашел отличное решение, поэтому я решил поделиться.

В итоге я просто расширил класс электронной почты CodeIgniter для установки заголовка To (я до сих пор собираюсь называть егозаголовок тщеславия, так как все выглядит и не имеет смысла) и отправка по SMTP.Если вы хотите увидеть простой пример того, что я сделал, расширьте класс Email своим собственным файлом MY_Email.php (см. Раздел Расширение собственных библиотек в Руководстве пользователя) и скопируйте _build_headers ()функция из класса Email.

    /**
 * Build final headers
 *
 * @access  protected
 * @param   string
 * @return  string
 */
protected function _build_headers()
{
    $this->_set_header('X-Sender', $this->clean_email($this->_headers['From']));
    $this->_set_header('X-Mailer', $this->useragent);
    $this->_set_header('X-Priority', $this->_priorities[$this->priority - 1]);
    $this->_set_header('Message-ID', $this->_get_message_id());
    $this->_set_header('Mime-Version', '1.0');
}

Затем добавьте свой собственный заголовок в строку, расположенную непосредственно под строкой Mime-Version, например:

    $this->_set_header('To', 'person@example.com');

Затем просто отправьте обычное письмо наодин из ваших собственных адресов электронной почты.Вы заметите, что, несмотря на то, что электронное письмо приходит на ваш адрес, оно, похоже, адресовано person@example.com.

Boom.

Если вы действительно хотите использовать полноеФайл MY_Email.php, который я создал, чтобы добавить опцию «Vanity To» в свой собственный проект CodeIgniter, см. Эту суть .

0 голосов
/ 18 февраля 2012

Здесь я использую что-то вроде этого:

$message = 'Your Message';
$subject = 'Your Subject';
$headers = 'Your headers';
$to = 'Address to send to';
$headers = 'Reply-To: Address'; //Perhaps you are looking for this?

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

Надеюсь, это работает для вас!

РЕДАКТИРОВАТЬ: Извините, неправильно понял вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...