Пример #1
0
 function send_emails($selected_option, $email_receive = false, $hash = "", $is_a_reply_comment = false, $files = array())
 {
     $current_user =& singleton("current_user");
     $e = $this->get_parent_object();
     $type = $e->classname . "_comments";
     $body = $this->get_value("comment");
     if (is_object($email_receive)) {
         list($from_address, $from_name) = parse_email_address($email_receive->mail_headers["from"]);
     }
     if ($is_a_reply_comment) {
         $id = $this->get_value("commentLinkID");
     } else {
         $id = $this->get_id();
     }
     $recipients = comment::get_email_recipients($selected_option, "comment", $id);
     list($to_address, $bcc, $successful_recipients) = comment::get_email_recipient_headers($recipients, $from_address);
     if ($to_address || $bcc || $successful_recipients) {
         $email = new email_send();
         if ($email_receive) {
             list($email_receive_header, $email_receive_body) = $email_receive->get_raw_header_and_body();
             $email->set_headers($email_receive_header);
             $email->set_body($email_receive_body, $email_receive->mail_text);
             // Remove any existing To/Cc header, to prevent the email getting sent to the same recipients again.
             $email->del_header("To");
             $email->del_header("Cc");
             $subject = $email->get_header("subject");
             $subject = trim(preg_replace("/{Key:[^}]*}.*\$/i", "", $subject));
         } else {
             $email->set_body($body);
             if ($files) {
                 // (if we're bouncing a complete email body the attachments are already included, else do this...)
                 foreach ((array) $files as $file) {
                     $email->add_attachment($file["fullpath"]);
                 }
             } else {
                 $email->set_content_type();
             }
         }
         $bcc && $email->add_header("Bcc", $bcc);
         // nuke bounce headers - mail won't send properly otherwise
         $email->del_header("Resent-From");
         $email->del_header("Resent-Date");
         $email->del_header("Resent-Message-ID");
         $email->del_header("Resent-To");
         $email->add_header("X-Alloc-CommentID", $this->get_id());
         if (is_object($e) && method_exists($e, "get_name")) {
             $email->add_header("X-Alloc-" . ucwords($e->classname), $e->get_name());
             $email->add_header("X-Alloc-" . ucwords($e->key_field->get_name()), $e->get_id());
         }
         // Add project header too, if possible
         if (has("project") && $e->classname != "project" && isset($e->data_fields["projectID"])) {
             $p = $e->get_foreign_object("project");
             $email->add_header("X-Alloc-Project", $p->get_value("projectName"));
             $email->add_header("X-Alloc-ProjectID", $p->get_id());
         }
         $email->set_to_address($to_address);
         $messageid = $email->set_message_id($hash);
         $subject_extra = "{Key:" . $hash . "}";
         $email->set_date();
         if (!$subject) {
             $tpl = config::get_config_item("emailSubject_" . $e->classname . "Comment");
             $tpl and $subject = commentTemplate::populate_string($tpl, $e->classname, $e->get_id());
             $e->classname != "task" and $prefix = ucwords($e->classname) . " Comment: ";
             $subject or $subject = $prefix . $e->get_id() . " " . $e->get_name(DST_VARIABLE);
         }
         $email->set_subject($subject . " " . $subject_extra);
         $email->set_message_type($type);
         // If from name is empty, then use the email address instead
         // eg: From: jon@jonny.com -> From: "jon@jonny.com via allocPSA" <*****@*****.**>
         $from_name or $from_name = $from_address;
         is_object($current_user) && !$from_name and $from_name = $current_user->get_name();
         if (defined("ALLOC_DEFAULT_FROM_ADDRESS") && ALLOC_DEFAULT_FROM_ADDRESS) {
             if (config::for_cyber()) {
                 $email->set_reply_to('"All parties via allocPSA" ' . ALLOC_DEFAULT_FROM_ADDRESS);
                 $email->set_from('"' . str_replace('"', '', $from_name) . ' via allocPSA" ' . ALLOC_DEFAULT_FROM_ADDRESS);
             } else {
                 $email->set_reply_to('"All parties" ' . ALLOC_DEFAULT_FROM_ADDRESS);
                 $email->set_from('"' . str_replace('"', '', $from_name) . '" ' . ALLOC_DEFAULT_FROM_ADDRESS);
             }
         } else {
             if (is_object($current_user) && $current_user->get_from()) {
                 $f = $current_user->get_from();
             } else {
                 $f = config::get_config_item("allocEmailAdmin");
             }
             $email->set_reply_to($f);
             $email->set_from($f);
         }
         if ($email->send(false)) {
             return array($successful_recipients, $messageid);
         }
     }
 }
Пример #2
0
 function forward($address, $subject, $text = '')
 {
     list($header, $body) = $this->get_raw_header_and_body();
     $header and $header_obj = $this->parse_headers($header);
     $orig_subject = $header_obj["subject"];
     $orig_subject and $s = " [" . trim($orig_subject) . "]";
     $dir = ATTACHMENTS_DIR . 'tmp' . DIRECTORY_SEPARATOR;
     $filename = md5($header . $body);
     $fh = fopen($dir . $filename, "wb");
     fputs($fh, $header . $body);
     fclose($fh);
     $email = new email_send();
     $email->set_from(config::get_config_item("AllocFromEmailAddress"));
     $email->set_subject($subject . $s);
     $email->set_body($text);
     $email->set_to_address($address);
     $email->set_message_type("orphan");
     $email->add_attachment($dir . $filename);
     $email->send(false);
     unlink($dir . $filename);
 }