123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- --TEST--
- Bug #80751 (Comma in recipient name breaks email delivery)
- --SKIPIF--
- <?php
- if (PHP_OS_FAMILY !== 'Windows') die('skip Windows only test');
- if (getenv("SKIP_SLOW_TESTS")) die('skip slow test');
- require_once __DIR__ . '/mail_skipif.inc';
- ?>
- --INI--
- SMTP=localhost
- smtp_port=25
- --FILE--
- <?php
- require_once __DIR__ . '/mail_include.inc';
- function find_and_delete_message($username, $subject) {
- global $default_mailbox, $password;
- $imap_stream = imap_open($default_mailbox, $username, $password);
- if ($imap_stream === false) {
- die("Cannot connect to IMAP server $server: " . imap_last_error() . "\n");
- }
- $found = false;
- $repeat_count = 20; // we will repeat a max of 20 times
- while (!$found && $repeat_count > 0) {
- // sleep for a while to allow msg to be delivered
- sleep(1);
-
- $num_messages = imap_check($imap_stream)->Nmsgs;
- for ($i = $num_messages; $i > 0; $i--) {
- $info = imap_headerinfo($imap_stream, $i);
- if ($info->subject === $subject) {
- $header = imap_fetchheader($imap_stream, $i);
- echo "Return-Path header found: ";
- var_dump(strpos($header, 'Return-Path: joe@example.com') !== false);
- echo "To header found: ";
- var_dump(strpos($header, 'To: "<bob@example.com>" <info@mail.local>') !== false);
- echo "From header found: ";
- var_dump(strpos($header, 'From: "<bob@example.com>" <joe@example.com>') !== false);
- echo "Cc header found: ";
- var_dump(strpos($header, 'Cc: "Lastname, Firstname\\\\" <admin@mail.local>') !== false);
- imap_delete($imap_stream, $i);
- $found = true;
- break;
- }
- }
- $repeat_count--;
- }
- imap_close($imap_stream, CL_EXPUNGE);
- return $found;
- }
- $to = "\"<bob@example.com>\" <{$users[1]}@$domain>";
- $subject = bin2hex(random_bytes(16));
- $message = 'hello';
- $headers = "From: \"<bob@example.com>\" <joe@example.com>\r\n"
- . "Cc: \"Lastname, Firstname\\\\\" <{$users[2]}@$domain>\r\n"
- . "Bcc: \"Firstname \\\"Ni,ck\\\" Lastname\" <{$users[3]}@$domain>\r\n";
- $res = mail($to, $subject, $message, $headers);
- if ($res !== true) {
- die("TEST FAILED : Unable to send test email\n");
- } else {
- echo "Message sent OK\n";
- }
- foreach ([$users[1], $users[2], $users[3]] as $user) {
- if (!find_and_delete_message("$user@$domain", $subject)) {
- echo "TEST FAILED: email not delivered\n";
- } else {
- echo "TEST PASSED: Message sent and deleted OK\n";
- }
- }
- ?>
- --EXPECT--
- Message sent OK
- Return-Path header found: bool(true)
- To header found: bool(true)
- From header found: bool(true)
- Cc header found: bool(true)
- TEST PASSED: Message sent and deleted OK
- Return-Path header found: bool(true)
- To header found: bool(true)
- From header found: bool(true)
- Cc header found: bool(true)
- TEST PASSED: Message sent and deleted OK
- Return-Path header found: bool(true)
- To header found: bool(true)
- From header found: bool(true)
- Cc header found: bool(true)
- TEST PASSED: Message sent and deleted OK
|