/** * @covers ICANS\Component\IcansLoggingComponent\Transport\Message::setBody * @depends testGetRawData */ public function testSetBody() { $body = array('Body Item 1', 'Body Item 2'); $this->object->setBody($body); $actual = $this->object->getRawData(); $this->assertArrayHasKey('event_body', $actual); $this->assertSame($actual['event_body'], $body); }
/** * @dataProvider notificationProvider * @expectedException \Apple\ApnPush\Notification\SendException */ public function testNotificationException($response, $statusCode) { $notification = $this->createNotification($response); $message = new Message(); $message->setDeviceToken(str_repeat('af', 32)); $message->setBody('foo'); try { $notification->send($message); } catch (SendException $exception) { $this->assertEquals($statusCode, $exception->getStatusCode()); throw $exception; } }
/** * Tests the setters and getters. */ public function testSettersAndGetters() { // create a message with minimum constructor args $message = new Message(Message::NORMAL); // Set remainder via setters $message->setHeader((object) array('testProp' => 'testval')); $message->setBody(simplexml_load_string('<testMessage testAtt="Hello" testAtt2="world"/>')); $message->setPriority(Message::PRIORITY_LOW); // test assertions $this->assertTrue($message instanceof Message, "Expecting \$message is Message"); $this->assertTrue($message->getType() == Message::NORMAL, "Expecting \$message->getType() == Message::NORMAL"); $this->assertTrue($message->getHeader()->testProp == 'testval', "Expecting \$message->getHeader()->testProp == 'testval'"); $this->assertTrue($message->getBody()->attributes()->testAtt == 'Hello', "Expecting \$message->getBody()->attributes()->testAtt == 'Hello'"); $this->assertTrue($message->getPriority() == Message::PRIORITY_LOW, "Expecting \$message->getPriority() == Message::PRIORITY_LOW"); }
/** * set the message body (either set to a stream resource or a string) * @param mixed $body the body to use * @return self */ public function setBody($body) { $this->cachePost = null; return parent::setBody($body); }
public function notify($title) { global $redcap_version; $dark = "#800000"; //#1a74ba 1a74ba $light = "#FFE1E1"; //#ebf6f3 $border = "#800000"; //FF0000"; //#a6d1ed #3182b9 // Run notification $url = APP_PATH_WEBROOT_FULL . "redcap_v{$redcap_version}/" . "DataEntry/index.php?pid={$this->project_id}&page={$this->instrument}&id={$this->record}&event_id={$this->event_id}"; // Message (email html painfully copied from box.net notification email) $msg = RCView::table(array('cellpadding' => '0', 'cellspacing' => '0', 'border' => '0', 'style' => 'border:1px solid #bbb; font:normal 12px Arial;color:#666'), RCView::tr(array(), RCView::td(array('style' => 'padding:13px'), RCView::table(array('style' => 'font:normal 15px Arial'), RCView::tr(array(), RCView::td(array('style' => 'font-size:18px;color:#000;border-bottom:1px solid #bbb'), RCView::span(array('style' => 'color:black'), RCVieW::a(array('style' => 'color:black'), 'REDCap AutoNotification Alert')) . RCView::br())) . RCView::tr(array(), RCView::td(array('style' => 'padding:10px 0'), RCView::table(array('style' => 'font:normal 12px Arial;color:#666'), RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Title") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), "<b>{$title}</b>")))) . RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Project") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), REDCap::getProjectTitle())))) . ($this->redcap_event_name ? RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Event") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), "{$this->redcap_event_name}")))) : '') . RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Instrument") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), $this->instrument)))) . RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Record") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), $this->record)))) . RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Date/Time") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), date('Y-m-d H:i:s'))))) . RCView::tr(array(), RCView::td(array('style' => 'text-align:right'), "Message") . RCView::td(array('style' => 'padding-left:10px;color:#000'), RCView::span(array('style' => 'color:black'), RCView::a(array('style' => 'color:black'), $this->config['message']))))))) . RCView::tr(array(), RCView::td(array('style' => "border:1px solid {$border};background-color:{$light};padding:20px"), RCView::table(array('style' => 'font:normal 12px Arial', 'cellpadding' => '0', 'cellspacing' => '0'), RCView::tr(array('style' => 'vertical-align:middle'), RCView::td(array(), RCView::table(array('cellpadding' => '0', 'cellspacing' => '0'), RCView::tr(array(), RCView::td(array('style' => "border:1px solid #600000;background-color:{$dark};padding:8px;font:bold 12px Arial"), RCView::a(array('class' => 'hide', 'style' => 'color:#fff;white-space:nowrap;text-decoration:none', 'href' => $url), "View Record"))))) . RCView::td(array('style' => 'padding-left:15px'), "To view this record, visit this link:" . RCView::br() . RCView::a(array('style' => "color:{$dark}", 'href' => $url), $url)))))))))); $msg = "<HTML><head></head><body>" . $msg . "</body></html>"; // Determine number of emails to send // Prepare message $email = new Message(); $email->setTo($this->config['to']); $email->setFrom($this->config['from']); $email->setSubject($this->config['subject']); $email->setBody($msg); // Send Email if (!$email->send()) { error_log('Error sending mail: ' . $email->getSendError() . ' with ' . json_encode($email)); exit; } // error_log ('Email sent'); // Add Log Entry $data_values = "title,{$title}\nrecord,{$this->record}\nevent,{$this->redcap_event_name}"; REDCap::logEvent('AutoNotify Alert', $data_values); }
/** * Sign a message (but don't encrypt) * * @param Message $message * @return Message * @throws \Exception */ public function sign(Message $message) : Message { if (!$this->serverKeyFingerprint) { throw new \Exception('No signing key provided'); } $gnupg = new \Crypt_GPG($this->options); $gnupg->addSignKey($this->serverKeyFingerprint); $message->setBody($gnupg->sign($message->getBodyText(), \Crypt_GPG::SIGN_MODE_CLEAR, true)); return $message; }
/** * Tests Message->setBody() */ public function testSetBody() { $this->Message->setBody('body'); $this->assertEquals('body', $this->Message->body); }
/** * Send a simple mail message using SquirrelMail's API. * * Until SquirrelMail is sufficiently redesigned, this * function is a stand-in for a simple mail delivery * call. Currently, it only sends plaintext messages * (unless the caller uses the $message parameter). * * @param string $to The destination recipient. * @param string $subject The message subject. * @param string $body The message body. * @param string $from The sender. * @param string $cc The destination carbon-copy recipient. * (OPTIONAL; default no Cc:) * @param string $bcc The destination blind carbon-copy recipient. * (OPTIONAL; default no Bcc:) * @param object $message If the caller wants to construct a more * complicated message themselves and pass * it here, this function will take care * of the rest - handing it over to SMTP * or Sendmail. If this parameter is non- * empty, all other parameters are ignored. * (OPTIONAL: default is empty) * * @return array A two-element array, the first element being a * boolean value indicating if the message was successfully * sent or not, and the second element being the message's * assigned Message-ID, if available (only available as of * SquirrelMail 1.4.14 and 1.5.2) * */ function sq_send_mail($to, $subject, $body, $from, $cc = '', $bcc = '', $message = '') { require_once SM_PATH . 'functions/mime.php'; require_once SM_PATH . 'class/mime.class.php'; if (empty($message)) { $message = new Message(); $header = new Rfc822Header(); $message->setBody($body); $content_type = new ContentType('text/plain'); global $special_encoding, $default_charset; if ($special_encoding) { $header->encoding = $special_encoding; } else { $header->encoding = '8bit'; } if ($default_charset) { $content_type->properties['charset'] = $default_charset; } $header->content_type = $content_type; $header->parseField('To', $to); $header->parseField('Cc', $cc); $header->parseField('Bcc', $bcc); $header->parseField('From', $from); $header->parseField('Subject', $subject); $message->rfc822_header = $header; } //sm_print_r($message);exit; global $useSendmail; // ripped from src/compose.php - based on both 1.5.2 and 1.4.14 // if (!$useSendmail) { require_once SM_PATH . 'class/deliver/Deliver_SMTP.class.php'; $deliver = new Deliver_SMTP(); global $smtpServerAddress, $smtpPort, $pop_before_smtp, $domain, $pop_before_smtp_host; $authPop = isset($pop_before_smtp) && $pop_before_smtp ? true : false; if (empty($pop_before_smtp_host)) { $pop_before_smtp_host = $smtpServerAddress; } $user = ''; $pass = ''; get_smtp_user($user, $pass); $stream = $deliver->initStream($message, $domain, 0, $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); } else { require_once SM_PATH . 'class/deliver/Deliver_SendMail.class.php'; global $sendmail_path, $sendmail_args; // Check for outdated configuration if (!isset($sendmail_args)) { if ($sendmail_path == '/var/qmail/bin/qmail-inject') { $sendmail_args = ''; } else { $sendmail_args = '-i -t'; } } $deliver = new Deliver_SendMail(array('sendmail_args' => $sendmail_args)); $stream = $deliver->initStream($message, $sendmail_path); } $success = false; $message_id = ''; if ($stream) { $deliver->mail($message, $stream); if (!empty($message->rfc822_header->message_id)) { $message_id = $message->rfc822_header->message_id; } $success = $deliver->finalizeStream($stream); } return array($success, $message_id); }
} $total_messages = imap_num_msg($mbox); $charset = 'UTF-8'; $structure = imap_fetchstructure($mbox, $msg_number); foreach ($structure->parameters as $param) { if ($param->attribute == 'charset') { $charset = $param->value; break; } } $header = imap_headerinfo($mbox, $msg_number); $message->setFrom($header->fromaddress); $message->setTo($header->toaddress); $message->setCc($header->ccaddress); $message->setSubject($header->subject); $message->setBody(imap_fetchbody($mbox, $msg_number, '1')); // '1' is the text/plain version of the body in a multipart message $message->setDate($header->date); $_SESSION['currentMessage'] = serialize($message); if ($msg_number > 1) { $prev_message = imap_uid($mbox, $msg_number - 1); } else { $prev_message = null; } if ($msg_number < $total_messages) { $next_message = imap_uid($mbox, $msg_number + 1); } else { $next_message = null; } imap_close($mbox); header("Content-Type: application/x-blueprint+xml");
function SendMDN($mailbox, $passed_id, $message, $imapConnection) { global $squirrelmail_language, $default_charset, $default_move_to_sent, $languages, $useSendmail, $domain, $sent_folder, $username, $data_dir; sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); $header = $message->rfc822_header; $rfc822_header = new Rfc822Header(); $content_type = new ContentType('multipart/report'); $content_type->properties['report-type'] = 'disposition-notification'; set_my_charset(); if ($default_charset) { $content_type->properties['charset'] = $default_charset; } $rfc822_header->content_type = $content_type; $rfc822_header->to[] = $header->dnt; $rfc822_header->subject = _("Read:") . ' ' . decodeHeader($header->subject, true, false); $idents = get_identities(); $needles = array(); if ($header->to) { foreach ($header->to as $message_to) { $needles[] = $message_to->mailbox . '@' . $message_to->host; } } $identity = find_identity($needles); $from_addr = build_from_header($identity); $reply_to = isset($idents[$identity]['reply_to']) ? $idents[$identity]['reply_to'] : ''; // FIXME: this must actually be the envelope address of the orginal message, // but do we have that information? For now the first identity is our best guess. $final_recipient = $idents[0]['email_address']; $rfc822_header->from = $rfc822_header->parseAddress($from_addr, true); if ($reply_to) { $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to, true); } // part 1 (RFC2298) $senton = getLongDateString($header->date, $header->date_unparsed); $to_array = $header->to; $to = ''; foreach ($to_array as $line) { $to .= ' ' . $line->getAddress(); } $now = getLongDateString(time()); set_my_charset(); $body = _("Your message") . "\r\n\r\n" . "\t" . _("To") . ': ' . decodeHeader($to, false, false) . "\r\n" . "\t" . _("Subject") . ': ' . decodeHeader($header->subject, false, false) . "\r\n" . "\t" . _("Sent") . ': ' . $senton . "\r\n" . "\r\n" . sprintf(_("Was displayed on %s"), $now); $special_encoding = ''; if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) { $body = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $body); if (strtolower($default_charset) == 'iso-2022-jp') { if (mb_detect_encoding($body) == 'ASCII') { $special_encoding = '8bit'; } else { $body = mb_convert_encoding($body, 'JIS'); $special_encoding = '7bit'; } } } elseif (sq_is8bit($body)) { $special_encoding = '8bit'; } $part1 = new Message(); $part1->setBody($body); $mime_header = new MessageHeader(); $mime_header->type0 = 'text'; $mime_header->type1 = 'plain'; if ($special_encoding) { $mime_header->encoding = $special_encoding; } else { $mime_header->encoding = '7bit'; } if ($default_charset) { $mime_header->parameters['charset'] = $default_charset; } $part1->mime_header = $mime_header; // part2 (RFC2298) $original_recipient = $to; $original_message_id = $header->message_id; $report = "Reporting-UA : {$SERVER_NAME} ; SquirrelMail (version " . SM_VERSION . ") \r\n"; if ($original_recipient != '') { $report .= "Original-Recipient : {$original_recipient}\r\n"; } $report .= "Final-Recipient: rfc822; {$final_recipient}\r\n" . "Original-Message-ID : {$original_message_id}\r\n" . "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; $part2 = new Message(); $part2->setBody($report); $mime_header = new MessageHeader(); $mime_header->type0 = 'message'; $mime_header->type1 = 'disposition-notification'; $mime_header->encoding = '7bit'; $part2->mime_header = $mime_header; $composeMessage = new Message(); $composeMessage->rfc822_header = $rfc822_header; $composeMessage->addEntity($part1); $composeMessage->addEntity($part2); if ($useSendmail) { require_once SM_PATH . 'class/deliver/Deliver_SendMail.class.php'; global $sendmail_path, $sendmail_args; // Check for outdated configuration if (!isset($sendmail_args)) { if ($sendmail_path == '/var/qmail/bin/qmail-inject') { $sendmail_args = ''; } else { $sendmail_args = '-i -t'; } } $deliver = new Deliver_SendMail(array('sendmail_args' => $sendmail_args)); $stream = $deliver->initStream($composeMessage, $sendmail_path); } else { require_once SM_PATH . 'class/deliver/Deliver_SMTP.class.php'; $deliver = new Deliver_SMTP(); global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host; $authPop = isset($pop_before_smtp) && $pop_before_smtp ? true : false; if (empty($pop_before_smtp_host)) { $pop_before_smtp_host = $smtpServerAddress; } get_smtp_user($user, $pass); $stream = $deliver->initStream($composeMessage, $domain, 0, $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); } $success = false; if ($stream) { $deliver->mail($composeMessage, $stream); $success = $deliver->finalizeStream($stream); } if (!$success) { $msg = _("Message not sent.") . "\n" . $deliver->dlv_msg; if (!empty($deliver->dlv_server_msg)) { $msg .= "\n" . _("Server replied:") . ' ' . $deliver->dlv_ret_nr . ' ' . nl2br(sm_encode_html_special_chars($deliver->dlv_server_msg)); } plain_error_message($msg); } else { unset($deliver); // move to sent folder // $move_to_sent = getPref($data_dir, $username, 'move_to_sent'); if (isset($default_move_to_sent) && $default_move_to_sent != 0) { $svr_allow_sent = true; } else { $svr_allow_sent = false; } if (isset($sent_folder) && ($sent_folder != '' || $sent_folder != 'none') && sqimap_mailbox_exists($imapConnection, $sent_folder)) { $fld_sent = true; } else { $fld_sent = false; } if (isset($move_to_sent) && $move_to_sent != 0 || !isset($move_to_sent)) { $lcl_allow_sent = true; } else { $lcl_allow_sent = false; } if ($fld_sent && $svr_allow_sent && !$lcl_allow_sent || $fld_sent && $lcl_allow_sent) { $save_reply_with_orig = getPref($data_dir, $username, 'save_reply_with_orig'); if ($save_reply_with_orig) { $sent_folder = $mailbox; } require_once SM_PATH . 'class/deliver/Deliver_IMAP.class.php'; $imap_deliver = new Deliver_IMAP(); $imap_deliver->mail($composeMessage, $imapConnection, 0, 0, $imapConnection, $sent_folder); unset($imap_deliver); } } return $success; }
public function getMessages($userId, $msgCollId, $fields, $msgIds, $options) { // TODO: Supports fields and options. Currently deleted messages couldn't be retrieved. $this->checkDb(); $userId = intval($userId); $fromQuery = " (messages.from = {$userId} and messages.from_deleted = 'no')"; $toQuery = " (messages.to = {$userId} and messages.to_deleted = 'no')"; $basicQuery = ''; $groupTable = ''; if ($msgCollId == '@inbox') { $basicQuery = $toQuery; } else { if ($msgCollId == '@outbox') { $basicQuery = $fromQuery; } else { if ($msgCollId == '@all') { $basicQuery = " ( " . $fromQuery . " or " . $toQuery . ")"; } else { $msgCollId = intval($msgCollId); $groupTable = ', message_groups'; $basicQuery = " messages.id = message_groups.message_id and " . " ( " . $fromQuery . " or " . $toQuery . ")" . " and message_groups.message_collection_id = {$msgCollId}"; } } } $messageIdQuery = ''; if (isset($msgIds) && is_array($msgIds) && count($msgIds) > 0) { $msgIds = array_map('intval', $msgIds); $messageIdQuery = " and messages.id in (" . implode(',', $msgIds) . ")"; } $countQuery = "select count(*) from messages {$groupTable} where {$basicQuery} {$messageIdQuery}"; $res = mysqli_query($this->db, $countQuery); if ($res !== false) { list($totalResults) = mysqli_fetch_row($res); } else { $totalResults = '0'; } $startIndex = $options->getStartIndex(); $count = $options->getCount(); $messages = array(); $messages['totalResults'] = $totalResults; $messages['startIndex'] = $startIndex; $messages['count'] = $count; $query = "select messages.from as `from`,\n messages.to as `to`,\n messages.id as id,\n messages.title as title,\n messages.body as body,\n messages.updated as updated,\n messages.collection_ids as collection_ids,\n messages.recipients as recipients\n from messages {$groupTable}\n where {$basicQuery} {$messageIdQuery}\n order by messages.created desc\n limit {$startIndex}, {$count};"; $res = mysqli_query($this->db, $query); if ($res) { if (@mysqli_num_rows($res)) { while ($row = @mysqli_fetch_array($res, MYSQLI_ASSOC)) { $message = new Message($row['id'], $row['title']); $message->setBody($row['body']); $message->setUpdated($row['updated']); $message->setRecipients(json_decode($row['recipients'])); if ($row['collection_ids']) { $message->setCollectionIds(json_decode($row['collection_ids'])); } $messages[] = $message; } } else { if ($messageIdQuery) { throw new SocialSpiException("Message not found", ResponseError::$NOT_FOUND); } } return $messages; } }
/** * send: * * @param array|string $pmTo * - Who will receve the message, array('email', 'name') or * 'email' * @param string $psSubject * messagem subject * @param string $psBodyText * - message in plan text format * @param string $psBodyHtml * - message in html format * @param array|string $paFrom * - Who send the message, array('email', 'name') or 'email' * * @return Zend_Mail */ public function send($pmFrom, $psSubject, $pmBody, $pmTo = null) { $lsFromEmail = null; $lsFromName = null; $lsToEmail = null; $lsToName = null; $loMail = new Message(); $loMail->setEncoding($this->_aOptions['charset']); $loMail->setSender($this->_aOptions["fromEmail"], $this->_aOptions["fromName"]); $loMail->addReplyTo($this->_aOptions["replayToEmail"], $this->_aOptions["replayToName"]); $loMail->setSubject($psSubject); $loMail->setBody($this->setContainer($pmBody)); if (is_array($pmTo)) { if (isset($pmTo[0])) { $lsToEmail = $pmTo[0]; } if (isset($pmTo[1])) { $lsToName = $pmTo[1]; } } elseif (is_string($pmTo)) { $lsToEmail = $pmTo; } else { $lsToEmail = $this->_aOptions["fromEmail"]; $lsToName = $this->_aOptions["fromName"]; } $loMail->addTo($lsToEmail, $lsToName); if (is_array($pmFrom)) { if (isset($pmFrom[0])) { $lsFromEmail = $pmFrom[0]; } if (isset($pmFrom[1])) { $lsFromName = $pmFrom[1]; } } elseif (is_string($pmFrom)) { $lsFromEmail = $pmFrom; } else { $lsFromEmail = $this->_aOptions["fromEmail"]; $lsFromName = $this->_aOptions["fromName"]; } $loMail->setFrom($lsFromEmail, $lsFromName); if ($this->_aOptions["transporter"] == "SMTP") { $loOptionsSMTP = new Transport\SmtpOptions($this->getSMTPOptions()); $loTransport = new Transport\Smtp($loOptionsSMTP); $loTransport->send($loMail); } elseif ($this->_aOptions["transporter"] == "sendmail") { $loTransport = new Transport\Sendmail(); $loTransport->send($loMail); } }
function SendMDN($mailbox, $passed_id, $sender, $message, $imapConnection) { global $username, $attachment_dir, $version, $attachments, $squirrelmail_language, $default_charset, $languages, $useSendmail, $domain, $sent_folder, $popuser, $data_dir, $username; sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); $header = $message->rfc822_header; $hashed_attachment_dir = getHashedDir($username, $attachment_dir); $rfc822_header = new Rfc822Header(); $content_type = new ContentType('multipart/report'); $content_type->properties['report-type'] = 'disposition-notification'; set_my_charset(); if ($default_charset) { $content_type->properties['charset'] = $default_charset; } $rfc822_header->content_type = $content_type; $rfc822_header->to[] = $header->dnt; $rfc822_header->subject = _("Read:") . ' ' . encodeHeader($header->subject); // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md) // This merely comes from compose.php and only happens when there is no // email_addr specified in user's identity (which is the startup config) if (ereg("^([^@%/]+)[@%/](.+)\$", $username, $usernamedata)) { $popuser = $usernamedata[1]; $domain = $usernamedata[2]; unset($usernamedata); } else { $popuser = $username; } $reply_to = ''; $ident = get_identities(); if (!isset($identity)) { $identity = 0; } $full_name = $ident[$identity]['full_name']; $from_mail = $ident[$identity]['email_address']; $from_addr = '"' . $full_name . '" <' . $from_mail . '>'; $reply_to = $ident[$identity]['reply_to']; if (!$from_mail) { $from_mail = "{$popuser}@{$domain}"; $from_addr = $from_mail; } $rfc822_header->from = $rfc822_header->parseAddress($from_addr, true); if ($reply_to) { $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to, true); } // part 1 (RFC2298) $senton = getLongDateString($header->date); $to_array = $header->to; $to = ''; foreach ($to_array as $line) { $to .= ' ' . $line->getAddress(); } $now = getLongDateString(time()); set_my_charset(); $body = _("Your message") . "\r\n\r\n" . "\t" . _("To") . ': ' . decodeHeader($to, false, false) . "\r\n" . "\t" . _("Subject") . ': ' . decodeHeader($header->subject, false, false) . "\r\n" . "\t" . _("Sent") . ': ' . $senton . "\r\n" . "\r\n" . sprintf(_("Was displayed on %s"), $now); $special_encoding = ''; if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && function_exists($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode')) { $body = call_user_func($languages[$squirrelmail_language]['XTRA_CODE'] . '_encode', $body); if (strtolower($default_charset) == 'iso-2022-jp') { if (mb_detect_encoding($body) == 'ASCII') { $special_encoding = '8bit'; } else { $body = mb_convert_encoding($body, 'JIS'); $special_encoding = '7bit'; } } } elseif (sq_is8bit($body)) { $special_encoding = '8bit'; } $part1 = new Message(); $part1->setBody($body); $mime_header = new MessageHeader(); $mime_header->type0 = 'text'; $mime_header->type1 = 'plain'; if ($special_encoding) { $mime_header->encoding = $special_encoding; } else { $mime_header->encoding = 'us-ascii'; } if ($default_charset) { $mime_header->parameters['charset'] = $default_charset; } $part1->mime_header = $mime_header; // part2 (RFC2298) $original_recipient = $to; $original_message_id = $header->message_id; $report = "Reporting-UA : {$SERVER_NAME} ; SquirrelMail (version {$version}) \r\n"; if ($original_recipient != '') { $report .= "Original-Recipient : {$original_recipient}\r\n"; } $final_recipient = $sender; $report .= "Final-Recipient: rfc822; {$final_recipient}\r\n" . "Original-Message-ID : {$original_message_id}\r\n" . "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; $part2 = new Message(); $part2->setBody($report); $mime_header = new MessageHeader(); $mime_header->type0 = 'message'; $mime_header->type1 = 'disposition-notification'; $mime_header->encoding = 'us-ascii'; $part2->mime_header = $mime_header; $composeMessage = new Message(); $composeMessage->rfc822_header = $rfc822_header; $composeMessage->addEntity($part1); $composeMessage->addEntity($part2); if ($useSendmail) { require_once SM_PATH . 'class/deliver/Deliver_SendMail.class.php'; global $sendmail_path; $deliver = new Deliver_SendMail(); $stream = $deliver->initStream($composeMessage, $sendmail_path); } else { require_once SM_PATH . 'class/deliver/Deliver_SMTP.class.php'; $deliver = new Deliver_SMTP(); global $smtpServerAddress, $smtpPort, $smtp_auth_mech, $pop_before_smtp; $authPop = isset($pop_before_smtp) && $pop_before_smtp ? true : false; get_smtp_user($user, $pass); $stream = $deliver->initStream($composeMessage, $domain, 0, $smtpServerAddress, $smtpPort, $user, $pass, $authPop); } $success = false; if ($stream) { $length = $deliver->mail($composeMessage, $stream); $success = $deliver->finalizeStream($stream); } if (!$success) { $msg = $deliver->dlv_msg . '<br />' . _("Server replied: ") . $deliver->dlv_ret_nr . ' ' . $deliver->dlv_server_msg; require_once SM_PATH . 'functions/display_messages.php'; plain_error_message($msg, $color); } else { unset($deliver); if (sqimap_mailbox_exists($imapConnection, $sent_folder)) { sqimap_append($imapConnection, $sent_folder, $length); require_once SM_PATH . 'class/deliver/Deliver_IMAP.class.php'; $imap_deliver = new Deliver_IMAP(); $imap_deliver->mail($composeMessage, $imapConnection); sqimap_append_done($imapConnection); unset($imap_deliver); } } return $success; }
/** * @param string $body * * @return Message */ public function message($body = '') { $message = new Message(); $message->setParent($this); $message->setBody($body); return $message; }
function SendMDN($mailbox, $passed_id, $sender, $message, $imapConnection) { global $username, $attachment_dir, $color, $default_move_to_sent, $version, $attachments, $squirrelmail_language, $default_charset, $languages, $useSendmail, $domain, $sent_folder, $popuser, $data_dir; sqgetGlobalVar('SERVER_NAME', $SERVER_NAME, SQ_SERVER); $header = $message->rfc822_header; $hashed_attachment_dir = getHashedDir($username, $attachment_dir); $rfc822_header = new Rfc822Header(); $content_type = new ContentType('multipart/report'); $content_type->properties['report-type'] = 'disposition-notification'; set_my_charset(); if ($default_charset) { $content_type->properties['charset'] = $default_charset; } $rfc822_header->content_type = $content_type; $rfc822_header->to[] = $header->dnt; $rfc822_header->subject = _("Read:") . ' ' . decodeHeader($header->subject, true, false); // FIXME: use identity.php from SM 1.5. Change this also in compose.php $reply_to = ''; if (isset($identity) && $identity != 'default') { $from_mail = getPref($data_dir, $username, 'email_address' . $identity); $full_name = getPref($data_dir, $username, 'full_name' . $identity); $from_addr = '"' . $full_name . '" <' . $from_mail . '>'; $reply_to = getPref($data_dir, $username, 'reply_to' . $identity); } else { $from_mail = getPref($data_dir, $username, 'email_address'); $full_name = getPref($data_dir, $username, 'full_name'); $from_addr = '"' . $full_name . '" <' . $from_mail . '>'; $reply_to = getPref($data_dir, $username, 'reply_to'); } // Patch #793504 Return Receipt Failing with <@> from Tim Craig (burny_md) // This merely comes from compose.php and only happens when there is no // email_addr specified in user's identity (which is the startup config) if (ereg("^([^@%/]+)[@%/](.+)\$", $username, $usernamedata)) { $popuser = $usernamedata[1]; $domain = $usernamedata[2]; unset($usernamedata); } else { $popuser = $username; } if (!$from_mail) { $from_mail = "{$popuser}@{$domain}"; $from_addr = $from_mail; } $rfc822_header->from = $rfc822_header->parseAddress($from_addr, true); if ($reply_to) { $rfc822_header->reply_to = $rfc822_header->parseAddress($reply_to, true); } // part 1 (RFC2298) $senton = getLongDateString($header->date, $header->date_unparsed); $to_array = $header->to; $to = ''; foreach ($to_array as $line) { $to .= ' ' . $line->getAddress(); } $now = getLongDateString(time()); set_my_charset(); $body = _("Your message") . "\r\n\r\n" . "\t" . _("To") . ': ' . decodeHeader($to, false, false, true) . "\r\n" . "\t" . _("Subject") . ': ' . decodeHeader($header->subject, false, false, true) . "\r\n" . "\t" . _("Sent") . ': ' . $senton . "\r\n" . "\r\n" . sprintf(_("Was displayed on %s"), $now); $special_encoding = ''; if (isset($languages[$squirrelmail_language]['XTRA_CODE']) && function_exists($languages[$squirrelmail_language]['XTRA_CODE'])) { $body = $languages[$squirrelmail_language]['XTRA_CODE']('encode', $body); if (strtolower($default_charset) == 'iso-2022-jp') { if (mb_detect_encoding($body) == 'ASCII') { $special_encoding = '8bit'; } else { $body = mb_convert_encoding($body, 'JIS'); $special_encoding = '7bit'; } } } elseif (sq_is8bit($body)) { // detect 8bit symbols added by translations $special_encoding = '8bit'; } $part1 = new Message(); $part1->setBody($body); $mime_header = new MessageHeader(); $mime_header->type0 = 'text'; $mime_header->type1 = 'plain'; if ($special_encoding) { $mime_header->encoding = $special_encoding; } else { $mime_header->encoding = '7bit'; } if ($default_charset) { $mime_header->parameters['charset'] = $default_charset; } $part1->mime_header = $mime_header; // part2 (RFC2298) $original_recipient = $to; $original_message_id = $header->message_id; $report = "Reporting-UA : {$SERVER_NAME} ; SquirrelMail (version {$version}) \r\n"; if ($original_recipient != '') { $report .= "Original-Recipient : {$original_recipient}\r\n"; } $final_recipient = $sender; $report .= "Final-Recipient: rfc822; {$final_recipient}\r\n" . "Original-Message-ID : {$original_message_id}\r\n" . "Disposition: manual-action/MDN-sent-manually; displayed\r\n"; $part2 = new Message(); $part2->setBody($report); $mime_header = new MessageHeader(); $mime_header->type0 = 'message'; $mime_header->type1 = 'disposition-notification'; $mime_header->encoding = '7bit'; $part2->mime_header = $mime_header; $composeMessage = new Message(); $composeMessage->rfc822_header = $rfc822_header; $composeMessage->addEntity($part1); $composeMessage->addEntity($part2); if ($useSendmail) { require_once SM_PATH . 'class/deliver/Deliver_SendMail.class.php'; global $sendmail_path, $sendmail_args; // Check for outdated configuration if (!isset($sendmail_args)) { if ($sendmail_path == '/var/qmail/bin/qmail-inject') { $sendmail_args = ''; } else { $sendmail_args = '-i -t'; } } $deliver = new Deliver_SendMail(array('sendmail_args' => $sendmail_args)); $stream = $deliver->initStream($composeMessage, $sendmail_path); } else { require_once SM_PATH . 'class/deliver/Deliver_SMTP.class.php'; $deliver = new Deliver_SMTP(); global $smtpServerAddress, $smtpPort, $pop_before_smtp, $pop_before_smtp_host; $authPop = isset($pop_before_smtp) && $pop_before_smtp ? true : false; $user = ''; $pass = ''; if (empty($pop_before_smtp_host)) { $pop_before_smtp_host = $smtpServerAddress; } get_smtp_user($user, $pass); $stream = $deliver->initStream($composeMessage, $domain, 0, $smtpServerAddress, $smtpPort, $user, $pass, $authPop, $pop_before_smtp_host); } $success = false; if ($stream) { $deliver->mail($composeMessage, $stream); $success = $deliver->finalizeStream($stream); } if (!$success) { $msg = _("Message not sent.") . ' ' . _("Server replied:") . "\n<blockquote>\n" . $deliver->dlv_msg . '<br />' . $deliver->dlv_ret_nr . ' ' . $deliver->dlv_server_msg . "</blockquote>\n\n"; require_once SM_PATH . 'functions/display_messages.php'; plain_error_message($msg, $color); } else { unset($deliver); // copy message to sent folder $move_to_sent = getPref($data_dir, $username, 'move_to_sent'); if (isset($default_move_to_sent) && $default_move_to_sent != 0) { $svr_allow_sent = true; } else { $svr_allow_sent = false; } if (isset($sent_folder) && ($sent_folder != '' || $sent_folder != 'none') && sqimap_mailbox_exists($imapConnection, $sent_folder)) { $fld_sent = true; } else { $fld_sent = false; } if (isset($move_to_sent) && $move_to_sent != 0 || !isset($move_to_sent)) { $lcl_allow_sent = true; } else { $lcl_allow_sent = false; } if ($fld_sent && $svr_allow_sent && !$lcl_allow_sent || $fld_sent && $lcl_allow_sent) { require_once SM_PATH . 'class/deliver/Deliver_IMAP.class.php'; $imap_deliver = new Deliver_IMAP(); $imap_deliver->mail($composeMessage, $imapConnection, 0, 0, $imapConnection, $sent_folder); unset($imap_deliver); } } return $success; }
/** * Reads the whole message, applies the header information, * sets the body as a plain text (thus does not parse any * MIME-Information and returns the created Message object. * * @param string filename * @return peer.mail.Message * @throws io.IOException if file cannot be read */ protected function _readMessageRaw($filename) { $header = ''; $body = ''; $f = new File($filename); $f->open(); $d = $f->read($f->size()); $f->close(); if (FALSE === ($hdrEnd = strpos($d, "\n\r\n\r"))) { $hdrEnd = 0; } $h = substr($c, 0, $hdrEnd); $b = substr($c, $hdrEnd); $msg = new Message(); $msg->setHdrString($h); $msg->setBody($b); return $msg; }
/** * function sendSimpleMessage * primary function for sending messages via array * * @return void * @author Sean Grove **/ public static function sendSimpleMessage($messageArray, $options = null) { // TODO: allow an email copy of the message to be sent out sfContext::getInstance()->getLogger()->log("message:" . print_r($messageArray, true)); sfContext::getInstance()->getLogger()->log("options:" . print_r($options, true)); if (!isset($messageArray["message_type"])) { $messageArray["message_type"] = 1; } sfContext::getInstance()->getLogger()->log('sending Message, owner sender'); $message = new Message(); $message->setSenderId($messageArray["from"]); sfContext::getInstance()->getLogger()->log('set from: ' . $messageArray["from"]); $message->setOwnerId($messageArray["owner"]); $message->setRecipientId($messageArray["to"]); $message->setParentId($messageArray["parent"]); $message->setSubject($messageArray["subject"]); $message->setBody($messageArray["text"]); $message->setHtmlBody('me'); $message->setFolder($messageArray["folder"]); $message->setMessageType($messageArray["message_type"]); $message->save(); if ($message->getMessageType() == 21) { EventUserPeer::addUser($message->getUuid(), $options["event_id"], $messageArray["from"], $options["points"], $options["comment"], $options["status"]); } if (isset($options["copyTo"]) && $options["copyTo"] == "sent") { sfContext::getInstance()->getLogger()->log('sending Message, owner recipient'); $message2 = array(); $message2["from"] = $messageArray["from"]; $message2["owner"] = $messageArray["from"]; $message2["to"] = $messageArray["to"]; $message2["parent"] = $messageArray["parent"]; $message2["subject"] = $messageArray["subject"]; $message2["text"] = $messageArray["text"]; $message2["folder"] = "sent"; self::sendSimpleMessage($message2); } if (!isset($options["notify"]) || $options["notify"] == true) { $sender = $message->getsfGuardUserRelatedBySenderId()->getProfile(); $recipient = $message->getsfGuardUserRelatedByRecipientId()->getProfile(); $text = '"' . $message->getSubject() . ' :: ' . $message->getBody() . '"'; $notification = 'New message from ' . $sender->getFullName() . ' on Cothink! '; $notification .= $text; $recipient->notify($notification); } sfContext::getInstance()->getLogger()->log('message sent'); }
/** * @param $userid * @param $headers * @param $table_csv * @param array $fields * @param $parent_chkd_flds * @param $export_file_name * @param $debug * @param null $comment * @param array $to */ public static function do_sendit($userid, $headers, $table_csv, $fields = array(), $parent_chkd_flds, $export_file_name, $comment = null, $to = array(), $debug) { global $project_id, $user_rights, $app_title, $lang, $redcap_version; // we could use the global $userid, but we need control of it for setting the user as [CRON], so this is passed in args. $return_val = false; $export_type = 0; // this puts all files generated here in the Data Export category in the File Repository $today = date("Y-m-d_Hi"); //get today for filename $projTitleShort = substr(str_replace(" ", "", ucwords(preg_replace("/[^a-zA-Z0-9 ]/", "", html_entity_decode($app_title, ENT_QUOTES)))), 0, 20); // shortened project title for filename $originalFilename = $projTitleShort . "_" . $export_file_name . "_DATA_" . $today . ".csv"; // name the file for storage $today = date("Y-m-d-H-i-s"); // get today for comment, subsequent processing as needed $docs_comment_WH = $export_type ? "Data export file created by $userid on $today" : fix_case($export_file_name) . " file created by $userid on $today. $comment"; // unused, but I keep it around just in case /** * setup vars for value export logging */ $chkd_fields = implode(',', $fields); /** * turn on/off exporting per user rights */ if (($user_rights['data_export_tool'] || $userid == '[CRON]') && !$debug) { $table_csv = addBOMtoUTF8($headers . $table_csv); /** * Store the file in the file system and log the activity, handle if error */ if (!DataExport::storeExportFile($originalFilename, $table_csv, true)) { log_event("", "redcap_data", "data_export", "", str_replace("'", "", $chkd_fields) . (($parent_chkd_flds == "") ? "" : ", " . str_replace("'", "", $parent_chkd_flds)), "Data Export Failed"); } else { log_event("", "redcap_data", "data_export", "", str_replace("'", "", $chkd_fields) . (($parent_chkd_flds == "") ? "" : ", " . str_replace("'", "", $parent_chkd_flds)), "Export data for SendIt"); /** * email file link and download password in two separate emails via REDCap SendIt */ $file_info_sql = db_query("SELECT docs_id, docs_size, docs_type FROM redcap_docs WHERE project_id = $project_id ORDER BY docs_id DESC LIMIT 1"); // get required info about the file we just created if ($file_info_sql) { $docs_id = db_result($file_info_sql, 0, 'docs_id'); $docs_size = db_result($file_info_sql, 0, 'docs_size'); $docs_type = db_result($file_info_sql, 0, 'docs_type'); } $yourName = 'PRIORITIZE REDCap'; $expireDays = 3; // set the SendIt to expire in this many days /** * $file_location: * 1 = ephemeral, will be deleted on $expireDate * 2 = export file, visible only to rights in file repository */ $file_location = 2; $send = 1; // always send download confirmation $expireDate = date('Y-m-d H:i:s', strtotime("+$expireDays days")); $expireYear = substr($expireDate, 0, 4); $expireMonth = substr($expireDate, 5, 2); $expireDay = substr($expireDate, 8, 2); $expireHour = substr($expireDate, 11, 2); $expireMin = substr($expireDate, 14, 2); // Add entry to sendit_docs table $query = "INSERT INTO redcap_sendit_docs (doc_name, doc_orig_name, doc_type, doc_size, send_confirmation, expire_date, username, location, docs_id, date_added) VALUES ('$originalFilename', '" . prep($originalFilename) . "', '$docs_type', '$docs_size', $send, '$expireDate', '" . prep($userid) . "', $file_location, $docs_id, '" . NOW . "')"; db_query($query); $newId = db_insert_id(); $logDescrip = "Send file from file repository (Send-It)"; log_event($query, "redcap_sendit_docs", "MANAGE", $newId, "document_id = $newId", $logDescrip); // Set email subject $subject = "[PRIORITIZE] " . $comment; $subject = html_entity_decode($subject, ENT_QUOTES); // Set email From address $from = array('Ken Bergquist' => '*****@*****.**'); // Begin set up of email to send to recipients $email = new Message(); foreach ($from as $name => $address) { $email->setFrom($address); $email->setFromName($name); } $email->setSubject($subject); // Loop through each recipient and send email foreach ($to as $name => $address) { // If a non-blank email address if (trim($address) != '') { // create key for unique url $key = strtoupper(substr(uniqid(md5(mt_rand())), 0, 25)); // create password $pwd = generateRandomHash(8, false, true); $query = "INSERT INTO redcap_sendit_recipients (email_address, sent_confirmation, download_date, download_count, document_id, guid, pwd) VALUES ('$address', 0, NULL, 0, $newId, '$key', '" . md5($pwd) . "')"; $q = db_query($query); // Download URL $url = APP_PATH_WEBROOT_FULL . 'redcap_v' . $redcap_version . '/SendIt/download.php?' . $key; // Message from sender $note = "$comment for $today"; // Get YMD timestamp of the file's expiration time $expireTimestamp = date('Y-m-d H:i:s', mktime($expireHour, $expireMin, 0, $expireMonth, $expireDay, $expireYear)); // Email body $body = "<html><body style=\"font-family:Arial;font-size:10pt;\"> $yourName {$lang['sendit_51']} \"$originalFilename\" {$lang['sendit_52']} " . date('l', mktime($expireHour, $expireMin, 0, $expireMonth, $expireDay, $expireYear)) . ", " . DateTimeRC::format_ts_from_ymd($expireTimestamp) . "{$lang['period']} {$lang['sendit_53']}<br><br> {$lang['sendit_54']}<br> <a href=\"$url\">$url</a><br><br> $note <br>-----------------------------------------------<br> {$lang['sendit_55']} " . CONSORTIUM_WEBSITE_DOMAIN . ". </body></html>"; // Construct email and send $email->setTo($address); $email->setToName($name); $email->setBody($body); if ($email->send()) { // Now send follow-up email containing password $bodypass = "******"font-family:Arial;font-size:10pt;\"> {$lang['sendit_50']}<br><br> $pwd<br><br> </body></html>"; $email->setSubject("Re: $subject"); $email->setBody($bodypass); sleep(2); // Hold for a second so that second email somehow doesn't reach the user first $email->send(); } else { error_log("ERROR: pid=$project_id: Email to $name <$address> NOT SENT"); } } } } unset($table_csv); } }
private function sendMessage() { $this->loadCurrentRoommate(); if (!$this->roommate->id) { $this->message = 'Roommate entry could not be found. <a href="mailto:%s">Please contact us</a> if you continue to have difficulties.'; return; } $sender_id = \Current_User::getId(); $message = new Message(); $message->setToUser($this->roommate->id); $message->setFromUser($sender_id); $message->setBody($_POST['message']); $message->setSenderName(\Current_User::getUsername()); $result = $message->save(); if (\PHPWS_Error::isError($result)) { \PHPWS_Error::log($result); return false; } else { return true; } }
$to = array( 'Ken Bergquist' => '*****@*****.**', 'Lasheaka McClellan' => '*****@*****.**', 'Tyre Johnson' => '*****@*****.**', 'Dona-Marie Mintz' => '*****@*****.**', 'Nicholas Slater' => '*****@*****.**' ); //$to = array('Ken Bergquist' => '*****@*****.**'); $from = array('Ken Bergquist' => '*****@*****.**'); $subject = "HCV-TARGET 2 Site Source Upload Notification"; $email = new Message (); foreach ($from as $name => $address) { $email->setFrom($address); $email->setFromName($name); } $email->setSubject($subject); $email->setBody($html); foreach ($to as $name => $address) { $email->setTo($address); $email->setToName($name); if (!$debug) { if (!$email->send()) { error_log("ERROR: Failed to send Site Source Upload digest"); } } } d($email); } else { error_log("NOTICE: No site source uploads were available to be digested"); } }
/** * function generateReplyMessage * makes a reply message for this message object * * @return Message * @author Sean Grove **/ public function generateReplyMessage() { $message = new Message(); $message->setRecipientId($this->getSenderId()); $message->setSenderId(sfContext::getInstance()->getUser()->getProfile()->getUserId()); $message->setParentId($this->getUuid()); $message->setSubject('re: ' . $this->getSubject()); $message->setBody($this->formatMessageReply()); sfContext::getInstance()->getLogger()->info('Set Msg parent id to :[' . $message->getParentId() . '], should be [' . $this->getUuid() . ']'); if ($message->getRecipientId() == sfContext::getInstance()->getUser()->getProfile()->getUserId()) { $message->setRecipientId($this->getRecipientId()); } return $message; }