/** * @dataProvider providerTestSendEmail */ public function testSendEmail($sendData, $expectedResult) { if (empty($sendData)) { $this->markTestSkipped('No $sendData from data provider.'); } if (!self::imapIsEnabled()) { $this->markTestSkipped('IMAP is not loaded'); return; } $emailINI = eZINI::instance('test_ezmail_plain.ini'); $mboxString = $emailINI->variable('TestAccounts', 'MBoxString'); $recipients = array_merge((array) $sendData['to'], (array) $sendData['cc'], (array) $sendData['bcc']); if (isset($sendData['Transport']) and $sendData['Transport'] == 'SMTP') { ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'Transport', 'SMTP'); $mailINI = eZINI::instance('test_ezmail_plain.ini'); $mailSetting = $mailINI->group('MailSettings'); ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'TransportServer', $mailSetting['TransportServer']); ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'TransportPort', $mailSetting['TransportPort']); ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'TransportUser', $mailSetting['TransportUser']); ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'TransportPassword', $mailSetting['TransportPassword']); } if (isset($sendData['DebugSending']) and $sendData['DebugSending'] == true) { ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'DebugSending', 'enabled'); $users = self::getTestAccounts(); $recipients[] = $users['01']; } else { ezpINIHelper::setINISetting('site.ini', 'MailSettings', 'DebugSending', 'disabled'); } foreach ($recipients as $recipient) { // Accept only testing accounts as recipients if (preg_match('/^ezp-unittests-\\d\\d\\@mail\\.ez\\.no$/', $recipient['email']) != 1) { $this->markTestSkipped('Refusing to use other than testing accounts'); return; } // Open mailbox and delete all existing emails in the account $mbox = @imap_open($mboxString, $recipient['username'], $recipient['password']); if (!$mbox) { $this->markTestSkipped('Cannot open mailbox for ' . $recipient['username'] . ': ' . imap_last_error()); return; } $status = imap_status($mbox, $mboxString, SA_MESSAGES); for ($i = 1; $i <= $status->messages; $i++) { imap_delete($mbox, $i); } imap_expunge($mbox); imap_close($mbox); } // Create and send email $mail = new eZMail(); if (count($sendData['to']) == 1) { $mail->setReceiver($sendData['to'][0]['email'], $sendData['to'][0]['name']); } else { $mail->setReceiverElements($sendData['to']); } if ($sendData['replyTo']) { $mail->setReplyTo($sendData['replyTo']['email'], $sendData['replyTo']['name']); } $mail->setSender($sendData['sender']['email'], $sendData['sender']['name']); if ($sendData['cc']) { if (count($sendData['cc']) == 1) { $mail->addCc($sendData['cc'][0]['email'], $sendData['cc'][0]['name']); } else { $mail->setCcElements($sendData['cc']); } } if ($sendData['bcc']) { if (count($sendData['bcc']) == 1) { $mail->addBcc($sendData['bcc'][0]['email'], $sendData['bcc'][0]['name']); } else { $mail->setBccElements($sendData['bcc']); } } $mail->setSubject($sendData['subject']); $mail->setBody($sendData['body']); $sendResult = eZMailTransport::send($mail); $this->assertEquals(true, $sendResult); // Wait for it... sleep(2); // Read emails foreach ($recipients as $recipient) { $mbox = @imap_open($mboxString, $recipient['username'], $recipient['password']); if (!$mbox) { $this->markTestSkipped('Cannot open mailbox for ' . $recipient['username'] . ': ' . imap_last_error()); return; } // Check message count before we try to open anything, in case nothing is there $status = imap_status($mbox, $mboxString, SA_MESSAGES); $this->assertEquals($expectedResult[$recipient['email']]['messageCount'], $status->messages); // Build actual result array, and check against the expected result $actualResult = array('messageCount' => $status->messages); for ($i = 1; $i <= $status->messages; $i++) { $headers = imap_headerinfo($mbox, $i); $actualResult['headers'] = array(); $actualResult['headers']['to'] = array(); foreach ($headers->to as $item) { $actualResult['headers']['to'][] = array('email' => $item->mailbox . '@' . $item->host); } $actualResult['headers']['replyTo'] = array(); foreach ($headers->reply_to as $item) { $actualResult['headers']['replyTo'][] = array('email' => $item->mailbox . '@' . $item->host, 'name' => $item->personal); } $actualResult['headers']['from'] = array(); foreach ($headers->from as $item) { $actualResult['headers']['from'][] = array('email' => $item->mailbox . '@' . $item->host, 'name' => $item->personal); } if (isset($headers->cc)) { $actualResult['headers']['cc'] = array(); foreach ($headers->cc as $item) { $actualResult['headers']['cc'][] = array('email' => $item->mailbox . '@' . $item->host, 'name' => $item->personal); } } $actualResult['headers']['subject'] = $headers->subject; $body = imap_body($mbox, $i); $actualResult['body'] = $body; $this->assertEquals($expectedResult[$recipient['email']], $actualResult); } imap_close($mbox); } }
} } $mail->setReceiver($receiver); if (!$mail->validate($sender)) { $sender = $ini->variable("MailSettings", "EmailSender"); } $mail->setSender($sender); if (!$mail->validate($replyTo)) { // If replyTo address is not set in the template, take it from the settings $replyTo = $ini->variable("MailSettings", "EmailReplyTo"); if (!$mail->validate($replyTo)) { // If replyTo address is not set in the settings, use the sender address $replyTo = $sender; } } $mail->setReplyTo($replyTo); // Handle CC recipients if ($ccReceivers) { if (!is_array($ccReceivers)) { $ccReceivers = array($ccReceivers); } foreach ($ccReceivers as $ccReceiver) { if ($mail->validate($ccReceiver)) { $mail->addCc($ccReceiver); } } } // Handle BCC recipients if ($bccReceivers) { if (!is_array($bccReceivers)) { $bccReceivers = array($bccReceivers);
if ($tpl->hasVariable('content_type')) { $mail->setContentType($tpl->variable('content_type')); } if (!$mail->validate($receiver)) { $receiver = $ini->variable("InformationCollectionSettings", "EmailReceiver"); if (!$receiver) { $receiver = $ini->variable("MailSettings", "AdminEmail"); } } $mail->setReceiver($receiver); if (!$mail->validate($sender)) { $sender = $ini->variable("MailSettings", "EmailSender"); } // HACK! Modifying the sender can alert spam guards. We just change the reply-to. //$mail->setSender( $sender ); $mail->setReplyTo($sender); // Handle CC recipients if ($ccReceivers) { if (!is_array($ccReceivers)) { $ccReceivers = array($ccReceivers); } foreach ($ccReceivers as $ccReceiver) { if ($mail->validate($ccReceiver)) { $mail->addCc($ccReceiver); } } } // Handle BCC recipients if ($bccReceivers) { if (!is_array($bccReceivers)) { $bccReceivers = array($bccReceivers);