"Test1\nTest2", '_from' => 'Sender ', ]; $sendmail = new \rcmail_sendmail(); $headers = $sendmail->headers_input(); $this->assertSame('Test1 Test2', $headers['Subject']); $this->assertSame('Sender ', $headers['From']); $this->assertSame('undisclosed-recipients:;', $headers['To']); $this->assertSame('test@domain.tld', $headers['X-Sender']); } /** * Test rcmail_sendmail::set_message_encoding() */ public function test_set_message_encoding() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::create_message() */ public function test_create_message() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::deliver_message() */ public function test_deliver_message() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::save_message() */ public function test_save_message() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::header_received() */ public function test_header_received() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::get_identity() */ public function test_get_identity() { self::initDB('identities'); self::initUser(); $db = \rcmail::get_instance()->get_dbh(); $query = $db->query('SELECT * FROM `identities` WHERE `standard` = 1 LIMIT 1'); $identity = $db->fetch_assoc($query); $sendmail = new \rcmail_sendmail(); $result = $sendmail->get_identity($identity['identity_id']); $this->assertSame($identity['identity_id'], $result['identity_id']); $this->assertSame('test ', $result['string']); $this->assertSame('test@example.com', $result['mailto']); } /** * Test rcmail_sendmail::extract_inline_images() */ public function test_extract_inline_images() { $this->markTestIncomplete(); } /** * @dataProvider provide_email_input_format_cases */ #[DataProvider('provide_email_input_format_cases')] public function test_email_input_format($input, $output, $charset) { $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = $charset; $this->assertSame($output, $sendmail->email_input_format($input)); } /** * Data for test_convert() */ public static function provide_email_input_format_cases(): iterable { return [ [ 'name ', 'name ', 'UTF-8', ], [ '"first last" ', 'first last ', 'UTF-8', ], [ '"first last" , test2@domain.tld,', 'first last , test2@domain.tld', 'UTF-8', ], [ '', 'test@domain.tld', 'UTF-8', ], [ 'test@domain.tld', 'test@domain.tld', 'UTF-8', ], [ 'test@domain.tld.', // #7899 'test@domain.tld', 'UTF-8', ], [ 'ö ', 'ö ', null, ], [ base64_decode('GyRCLWo7M3l1OSk2SBsoQg==') . ' ', '=?ISO-2022-JP?B?GyRCLWo7M3l1OSk2SBsoQg==?= ', 'ISO-2022-JP', ], [ 'test@тест.рф.', // #8493 'test@xn--e1aybc.xn--p1ai', 'UTF-8', ], ]; } /** * Test rcmail_sendmail::generic_message_footer() */ public function test_generic_message_footer() { $this->markTestIncomplete(); } /** * Test rcmail_sendmail::draftinfo_encode() and draftinfo_decode() */ public function test_draftinfo_encode_and_decode() { $input = ['test' => 'test']; $result = \rcmail_sendmail::draftinfo_encode($input); $this->assertSame('test=test', $result); $this->assertSame($input, \rcmail_sendmail::draftinfo_decode($result)); $input = ['folder' => 'test']; $result = \rcmail_sendmail::draftinfo_encode($input); $this->assertSame('folder=B::dGVzdA==', $result); $this->assertSame($input, \rcmail_sendmail::draftinfo_decode($result)); $input = ['test' => 'test;test']; $result = \rcmail_sendmail::draftinfo_encode($input); $this->assertSame('test=B::dGVzdDt0ZXN0', $result); $this->assertSame($input, \rcmail_sendmail::draftinfo_decode($result)); $input = ['test' => 'test;test', 'a' => 'b']; $result = \rcmail_sendmail::draftinfo_encode($input); $this->assertSame('test=B::dGVzdDt0ZXN0; a=b', $result); $this->assertSame($input, \rcmail_sendmail::draftinfo_decode($result)); } /** * Test rcmail_sendmail::headers_output() */ public function test_headers_output() { $message = new \stdClass(); $message->headers = new \rcube_message_header(); $message->headers->charset = 'UTF-8'; $message->headers->to = ''; $message->headers->from = ''; $message->headers->cc = ''; $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = RCUBE_CHARSET; $sendmail->options['message'] = $message; $result = $sendmail->headers_output(['part' => 'to']); $this->assertTrue(strpos($result, '') !== false); $result = $sendmail->headers_output(['part' => 'from']); $this->assertTrue(strpos($result, '') !== false); // TODO: Test part=from with identities $this->markTestIncomplete(); } /** * Test rcmail_sendmail::reply_subject() */ public function test_reply_subject() { $this->assertSame('Re: Test subject', \rcmail_sendmail::reply_subject('Test subject')); $this->assertSame('Re: Test subject', \rcmail_sendmail::reply_subject('Re: Test subject')); $this->assertSame('Re: Test subject', \rcmail_sendmail::reply_subject('Re: Re: Test subject')); $this->assertSame('Re: Test subject', \rcmail_sendmail::reply_subject('Re: Test subject (Was: Something else)')); } /** * Test rcmail_sendmail::compose_subject() */ public function test_compose_subject() { $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = RCUBE_CHARSET; $sendmail->options['mode'] = \rcmail_sendmail::MODE_REPLY; $_POST = ['_subject' => 'test']; $result = $sendmail->compose_subject([]); $this->assertTrue(strpos($result, '') !== false); } /** * Test rcmail_sendmail::mdn_checkbox() */ public function test_mdn_checkbox() { $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = RCUBE_CHARSET; $sendmail->options['mode'] = \rcmail_sendmail::MODE_REPLY; $result = $sendmail->mdn_checkbox([]); $this->assertTrue(strpos($result, '') !== false); } /** * Test rcmail_sendmail::dsn_checkbox() */ public function test_dsn_checkbox() { $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = RCUBE_CHARSET; $sendmail->options['mode'] = \rcmail_sendmail::MODE_REPLY; $result = $sendmail->dsn_checkbox([]); $this->assertTrue(strpos($result, '') !== false); } /** * Test rcmail_sendmail::priority_selector() */ public function test_priority_selector() { $sendmail = new \rcmail_sendmail(); $sendmail->options['charset'] = RCUBE_CHARSET; $sendmail->options['mode'] = \rcmail_sendmail::MODE_REPLY; $result = $sendmail->priority_selector([]); $expected = ''; $this->assertTrue(strpos($result, $expected) !== false); } /** * Test rcmail_sendmail::identity_select() */ public function test_identity_select() { $message = new \stdClass(); $message->headers = new \rcube_message_header(); $message->headers->charset = 'UTF-8'; $message->headers->to = ''; $message->headers->from = ''; $message->headers->cc = ''; $result = \rcmail_sendmail::identity_select($message, []); $this->assertNull($result); $identities = [ [ 'identity_id' => 1, 'user_id' => 1, 'standard' => 1, 'name' => 'Default', 'email' => 'default@domain.tld', 'email_ascii' => 'default@domain.tld', 'ident' => 'Default ', ], [ 'identity_id' => 2, 'user_id' => 1, 'standard' => 0, 'name' => 'Identity One', 'email' => 'ident1@domain.tld', 'email_ascii' => 'ident1@domain.tld', 'ident' => '"Identity One" ', ], [ 'identity_id' => 3, 'user_id' => 1, 'standard' => 0, 'name' => 'Identity Two', 'email' => 'ident2@domain.tld', 'email_ascii' => 'ident2@domain.tld', 'ident' => '"Identity Two" ', ], ]; $message->headers->to = 'ident2@domain.tld'; $message->headers->from = 'from@other.domain.tld'; $result = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[2], $result); $message->headers->to = 'ident1@domain.tld'; $message->headers->from = 'from@other.domain.tld'; $result = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $result); // #7211 $message->headers->to = 'ident1@domain.tld'; $message->headers->from = 'ident2@domain.tld'; $result = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $result); $message->headers->to = 'ident2@domain.tld'; $message->headers->from = 'ident1@domain.tld'; $result = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[2], $result); } /** * Test identities selection using Return-Path header */ public function test_identity_select_return_path() { $identities = [ [ 'name' => 'Test', 'email_ascii' => 'addr@domain.tld', 'ident' => 'Test ', ], [ 'name' => 'Test', 'email_ascii' => 'thing@domain.tld', 'ident' => 'Test ', ], [ 'name' => 'Test', 'email_ascii' => 'other@domain.tld', 'ident' => 'Test ', ], ]; $message = new \stdClass(); $message->headers = new \rcube_message_header(); $message->headers->set('Return-Path', ''); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[0], $res); $message->headers->set('Return-Path', ''); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $res); } /** * Test identities selection (#1489378) */ public function test_identity_select_more() { $identities = [ [ 'name' => 'Test 1', 'email_ascii' => 'addr1@domain.tld', 'ident' => 'Test 1 ', ], [ 'name' => 'Test 2', 'email_ascii' => 'addr2@domain.tld', 'ident' => 'Test 2 ', ], [ 'name' => 'Test 3', 'email_ascii' => 'addr3@domain.tld', 'ident' => 'Test 3 ', ], [ 'name' => 'Test 4', 'email_ascii' => 'addr2@domain.tld', 'ident' => 'Test 4 ', ], ]; $message = new \stdClass(); $message->headers = new \rcube_message_header(); $message->headers->set('From', ''); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $res); $message->headers->set('From', 'Test 2 '); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $res); $message->headers->set('From', 'Other '); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[1], $res); $message->headers->set('From', 'Test 4 '); $res = \rcmail_sendmail::identity_select($message, $identities); $this->assertSame($identities[3], $res); } /** * Test rcmail_sendmail::collect_recipients() */ public function test_collect_recipients() { $this->markTestIncomplete(); } }