2

最近、スクリプトを作成し、アクセスできるドメインに配置しました。メールを送信しようとすると、メールは問題なく送信されましたが、奇妙なことがありました。

件名フィールドが設定されていません。私の件名は、送信したことがないかのように完全に空白です。また、ヘッダーが送信されているようにも見えません。(これを参照してください:画像)

また、これらの情報がメッセージと一緒にメールで送信される理由はありますか? 同様に、それはphp.iniの設定である可能性がありますか?

メッセージ ID: message-id-here@**.gs

日付: 2013 年 1 月 2 日水曜日 05:37:47 +0400 (MSK)

From: www-data@**.gs (www-data)

リターンパス: www-data@**.gs

X-OriginalArrivalTime: 2013 年 1 月 2 日 01:37:47.0814 (UTC) FILETIME=[C5131C60:01CDE889]

私は電子メールを送信しています。これがメッセージです。

これは正しく通っていますか?

現在、これが私のスクリプトの外観です。

<html>
<head>
    <title>Email</title>
</head>

<body>
    <?php
        ini_set("mail.add_x_header", "Off");
        if(isset($_POST['send']))
        {
            $To = ((isset($_POST['to'])) ? $_POST['to'] : '');
            $Subject = ((isset($_PST['subject'])) ? $_POST['subject'] : '');
            $Message = ((isset($_POST['message'])) ? $_POST['message'] : '');
            $Headers = ((isset($_POST['from'])) ? "From: " . $_POST['from'] . "\r\n" : '');
            $Headers = ((isset($_POST['reply-to'])) ? "Reply-to: " . $_POST['reply-to'] . "\r\nReturn-Path:" . $_POST['reply-to'] . "\r\n" : '');
            if(mail($To, $Subject, $Message, $Headers))
            {
                echo 'Sent to ' . $To . '.';
            }
        }
    ?>

    <form method="POST">
        To: <input type="text" name="to" value="" /><br />
        Subject: <input type="text" name="subject" value="" /><br />
        Message: <textarea name="message" style="width:300px; height:200px;"></textarea><br />
        From: <input type="text" name="from" value="" /><br />
        Reply-To: <input type="text" name="reply-to" value="" /><br />
        <input type="submit" name="send" />
    </form>
</body>

4

1 に答える 1

4

タイプミスのため、件名が設定されていません。変化する:

$Subject = ((isset($_PST['subject'])) ? $_POST['subject'] : '');

に:

$Subject = ((isset($_POST['subject'])) ? $_POST['subject'] : '');

ヘッダーに関しては、Return-To が From ヘッダーをオーバーライドします。一部の電子メール クライアントは \r\n を「すべてのヘッダーの末尾」として解釈するため、\r\n を \n に変更する必要もあります。

したがって、代わりに:

$Headers = ((isset($_POST['from'])) ? "From: " . $_POST['from'] . "\r\n" : '');
$Headers = ((isset($_POST['reply-to'])) ? "Reply-to: " . $_POST['reply-to'] . "\r\nReturn-Path:" . $_POST['reply-to'] . "\r\n" : '');

行う:

$Headers = array();
if (isset($_POST['from']))
{
    $Headers[] = "From: " . $_POST['from'];
}
if (isset($_POST['reply-to']))
{
    $Headers[] = "Reply-to: " . $_POST['reply-to'];
    $Headers[] = "Return-Path: " . $_POST['reply-to'];
}
$Headers = implode("\n", $Headers) . "\r\n";
于 2013-01-02T02:01:24.040 に答える