1

私はこれと24時間以上戦っています. サーバーをセットアップして、ユーザー アカウントをセットアップし、電子メールで確認リンクを送信しました。すべてがうまく機能しますが、mySql データベースから派生した値を持つ 2 つの文字列変数ハッシュとトークンに問題があります。電子メールが生成されるたびに、これらの変数は最初の 3 文字を分解してデータを解析します。

http://verify.myserver.com/objects/1.8.12.7.10.1.9/verify-email.php?mm_function=submit&hashü41faa912dd9451a8d397fc9386ca1c69&mm_tokenü2rnjrcbhn3qegtu46np03p5pg6aczbtrs51782fkuwq2c8w9m80enutwruydwewca&mm_timezone=2&mm_charset=utf-8

リンクは次のようになります。

http://verify.myserver.com/objects/1.8.12.7.10.1.9/verify-email.php?mm_function=submit&hash=fc41faa912dd9451a8d397fc9386ca1c69&mm_token=fc22rnjrcbhn3qegtu46np03p5pg6aczbtrs51782fkuwq2c8w9m80enutwruydwewca&mm_timezone=2&mm_charset=utf-8

コードを混ぜて一致させようとしましたが、役に立ちませんでした。現在、私のコードは次のとおりです。

$weblink = "http://verify.myserver.com/objects/1.8.12.7.10.1.9/verify-email.php?";
$weblink . "mm_function=submit&hash=" . $hash . "&mm_token=" . $token . "&mm_timezone=" . $timezone . "&mm_charset=utf-8";

奇妙なことに、$hash と $token をリンクとは関係なく、電子メールの一部として配置すると、すべて正常に表示されます。

InnoDB エンジンを実行している mySql を使用しています。DB 照合は latin7_general_ci です。

ありがとう。

4

1 に答える 1

0

電子メールのエンコーディングが原因であることが判明しました。oktopusのおかげで、charset=iso-8859-1を使用してヘッダーで次のように修正しました。

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$headers = "From: Some Sender <someone@example.com>". PHP_EOL;
$headers.= "Return-Path: Some Sender <someone@example.com>". PHP_EOL;
$headers.= "Organization: My Organization>". PHP_EOL; 
$headers.= "Content-type: text/plain; charset=iso-8859-1". PHP_EOL;
$headers.= "MIME-Version: 1.0". PHP_EOL;
$headers.= "X-Priority: 3". PHP_EOL;

$weblink = "http://verify.myserver.com/objects/1.8.12.7.10.1.9/process.php?mm_function=submit&";
$weblink.= "mm_hash=$hash&mm_token=$verification&mm_timezone=$timezone&mm_charset=iso-8859-1";

mail($recipient, "Account Verification Link", "Hello $recipient,". PHP_EOL . PHP_EOL ."Please follow the link below to verify and activate your account:". PHP_EOL . PHP_EOL . $weblink . PHP_EOL . PHP_EOL . "Thank you.". PHP_EOL . PHP_EOL . "App Support Team", $headers);
于 2013-02-23T10:21:46.507 に答える