addStringEmbeddedImage() public method

This can include images, sounds, and just about any other document type. Be sure to set the $type to an image type for images: JPEG images use 'image/jpeg', GIF uses 'image/gif', PNG uses 'image/png'.
public addStringEmbeddedImage ( string $string, string $cid, string $name = '', string $encoding = 'base64', string $type = '', string $disposition = 'inline' ) : boolean
$string string The attachment binary data.
$cid string Content ID of the attachment; Use this to reference the content when using an embedded image in HTML.
$name string
$encoding string File encoding (see $Encoding).
$type string MIME type.
$disposition string Disposition to use
return boolean True on successfully adding an attachment
Example #1
0
 /**
  * Test embedded image without a name
  */
 public function testHTMLStringEmbedNoName()
 {
     $this->Mail->Body = 'This is the <strong>HTML</strong> part of the email.';
     $this->Mail->Subject .= ': HTML + unnamed embedded image';
     $this->Mail->isHTML(true);
     if (!$this->Mail->addStringEmbeddedImage(file_get_contents(realpath($this->INCLUDE_DIR . '/examples/images/phpmailer_mini.png')), md5('phpmailer_mini.png') . '@phpmailer.0', '', 'base64', '', 'inline')) {
         $this->assertTrue(false, $this->Mail->ErrorInfo);
         return;
     }
     $this->buildBody();
     $this->assertTrue($this->Mail->send(), $this->Mail->ErrorInfo);
 }
Example #2
0
 public static function mailWrapper($to, $subject = '(No subject)', $message = '', $aImagesToEmbed = [], $aFilesToAttach = [])
 {
     $mail = new \PHPMailer();
     $mail->CharSet = 'UTF-8';
     $mail->isMail();
     if (HelperConfig::$core['mail_method'] == 'sendmail') {
         $mail->isSendmail();
     } elseif (HelperConfig::$core['mail_method'] == 'smtp') {
         $mail->isSMTP();
         $mail->Host = HelperConfig::$secrets['mail_smtp_server'];
         $mail->Port = HelperConfig::$secrets['mail_smtp_port'];
         if (HelperConfig::$secrets['mail_smtp_auth'] == true) {
             $mail->SMTPAuth = true;
             $mail->Username = HelperConfig::$secrets['mail_smtp_auth_user'];
             $mail->Password = HelperConfig::$secrets['mail_smtp_auth_pwd'];
             if (HelperConfig::$secrets['mail_smtp_secure']) {
                 $mail->SMTPSecure = 'tls';
                 if (HelperConfig::$secrets['mail_smtp_secure_method'] == 'ssl') {
                     $mail->SMTPSecure = 'ssl';
                 }
             }
         }
     }
     $mail->From = HelperConfig::$core["email_sender"];
     $mail->FromName = HelperConfig::$core["email_sendername"];
     $mail->addAddress($to);
     $mail->isHTML(true);
     $mail->Subject = $subject;
     $mail->Body = $message;
     if (is_array($aImagesToEmbed) && count($aImagesToEmbed)) {
         foreach ($aImagesToEmbed as $sKey => $imgdata) {
             $imginfo = getimagesizefromstring($imgdata['binimg']);
             $mail->addStringEmbeddedImage($imgdata['binimg'], $sKey, $sKey, 'base64', $imginfo['mime']);
         }
     }
     if (is_array($aFilesToAttach) && count($aFilesToAttach)) {
         foreach ($aFilesToAttach as $sValue) {
             if (file_exists($sValue)) {
                 $mail->addAttachment($sValue);
             }
         }
     }
     //$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
     return $mail->send();
 }
Example #3
0
/** mailer - function to send mails to users 
 *  @arg $from - a string email address, or an array in array(email_address, name format)
 *  @arg $to - either a string of comma delimited email addresses, or an array of addresses in email_address => name format
 *  @arg $cc - either a string of comma delimited email addresses, or an array of addresses in email_address => name format
 *  @arg $bcc - either a string of comma delimited email addresses, or an array of addresses in email_address => name format
 *  @arg $replyto - a string email address, or an array in array(email_address, name format)
 *  @arg $subject - the email subject
 *  @arg $body - the email body, in HTML format.  If content_text is not set, the function will attempt to extract
 *       from the HTML format.
 *  @arg $body_text - the email body in TEXT format.  If set, it will override the stripping tags method
 *  @arg $attachments - the emails attachments as an array
 *  @arg $headers - an array of name value pairs representing custom headers.
 *  @arg $html - if set to true, html is the default, otherwise text format will be used
 */
function mailer($from, $to, $cc, $bcc, $replyto, $subject, $body, $body_text = '', $attachments, $headers, $html = true)
{
    global $config;
    include_once $config['base_path'] . '/lib/PHPMailer/PHPMailerAutoload.php';
    // Set the to informaiotn
    if ($to == '') {
        return 'Mailer Error: No <b>TO</b> address set!!<br>If using the <i>Test Mail</i> link, please set the <b>Alert e-mail</b> setting.';
    }
    if (is_array($to)) {
        $toText = $to[1] . ' <' . $to[0] . '>';
    } else {
        $toText = $to;
    }
    if (is_array($from)) {
        $fromText = $from[1] . ' <' . $from[0] . '>';
    } else {
        $fromText = $from;
    }
    $body = str_replace('<SUBJECT>', $subject, $body);
    $body = str_replace('<TO>', $toText, $body);
    $body = str_replace('<FROM>', $fromText, $body);
    // Create the PHPMailer instance
    $mail = new PHPMailer();
    // Set a reasonable timeout of 5 seconds
    $timeout = read_config_option('settings_smtp_timeout');
    if (empty($timeout) || $timeout < 0 || $timeout > 300) {
        $mail->Timeout = 5;
    } else {
        $mail->Timeout = $timeout;
    }
    // Set the subject
    $mail->Subject = $subject;
    $how = read_config_option('settings_how');
    if ($how < 0 || $how > 2) {
        $how = 0;
    }
    if ($how == 0) {
        $mail->isMail();
    } else {
        if ($how == 1) {
            $mail->Sendmail = read_config_option('settings_sendmail_path');
            $mail->isSendmail();
        } else {
            if ($how == 2) {
                $mail->isSMTP();
                $mail->Host = read_config_option('settings_smtp_host');
                $mail->Port = read_config_option('settings_smtp_port');
                $mail->Username = read_config_option('settings_smtp_username');
                $mail->Password = read_config_option('settings_smtp_password');
                if ($mail->Username != '') {
                    $mail->SMTPAuth = true;
                }
                // Set a reasonable timeout of 5 seconds
                $timeout = read_config_option('settings_smtp_timeout');
                if (empty($timeout) || $timeout < 0 || $timeout > 300) {
                    $mail->Timeout = 5;
                } else {
                    $mail->Timeout = $timeout;
                }
                $secure = read_config_option('settings_smtp_secure');
                if (!empty($secure) && $secure != 'none') {
                    $smtp->SMTPSecure = $secure;
                    if (substr_count($mail->Host, ':') == 0) {
                        $mail->Host = $secure . '://' . $mail->Host;
                    }
                }
            }
        }
    }
    // Set the from information
    if (!is_array($from)) {
        $fromname = '';
        if ($from == '') {
            $from = read_config_option('settings_from_email');
            $fromname = read_config_option('settings_from_name');
            if (isset($_SERVER['HOSTNAME'])) {
                $from = 'Cacti@' . $_SERVER['HOSTNAME'];
            } else {
                $from = '*****@*****.**';
            }
            if ($fromname == '') {
                $fromname = 'Cacti';
            }
        }
        $mail->setFrom($from, $fromname);
    } else {
        $mail->setFrom($from[0], $from[1]);
    }
    if (!is_array($to)) {
        $to = explode(',', $to);
        foreach ($to as $t) {
            $t = trim($t);
            if ($t != '') {
                $mail->addAddress($t);
            }
        }
    } else {
        foreach ($to as $email => $name) {
            $mail->addAddress($email, $name);
        }
    }
    if (!is_array($cc)) {
        if ($cc != '') {
            $cc = explode(',', $cc);
            foreach ($cc as $c) {
                $c = trim($c);
                $mail->addCC($c);
            }
        }
    } else {
        foreach ($cc as $email => $name) {
            $mail->addCC($email, $name);
        }
    }
    if (!is_array($bcc)) {
        if ($bcc != '') {
            $bcc = explode(',', $bcc);
            foreach ($bcc as $bc) {
                $bc = trim($bc);
                $mail->addBCC($bc);
            }
        }
    } else {
        foreach ($bcc as $email => $name) {
            $mail->addBCC($email, $name);
        }
    }
    if (!is_array($replyto)) {
        if ($replyto != '') {
            $mail->replyTo($replyto);
        }
    } else {
        $mail->replyTo($replyto[0], $replyto[1]);
    }
    // Set the wordwrap limits
    $wordwrap = read_config_option('settings_wordwrap');
    if ($wordwrap == '') {
        $wordwrap = 76;
    }
    if ($wordwrap > 9999) {
        $wordwrap = 9999;
    }
    if ($wordwrap < 0) {
        $wordwrap = 76;
    }
    $mail->WordWrap = $wordwrap;
    $mail->setWordWrap();
    $i = 0;
    // Handle Graph Attachments
    if (is_array($attachments) && sizeof($attachments) && substr_count($body, '<GRAPH>') > 0) {
        foreach ($attachments as $val) {
            $graph_data_array = array('output_flag' => RRDTOOL_OUTPUT_STDOUT);
            $data = rrdtool_function_graph($val['local_graph_id'], $val['rra_id'], $graph_data_array);
            if ($data != '') {
                /* get content id and create attachment */
                $cid = getmypid() . '_' . $i . '@' . 'localhost';
                /* attempt to attach */
                if ($mail->addStringEmbededImage($data, $cid, $val['filename'] . '.png', 'base64', 'image/png', 'inline') === false) {
                    cacti_log('ERROR: ' . $mail->ErrorInfo, false);
                    return $mail->ErrorInfo;
                }
                $body = str_replace('<GRAPH>', "<br><br><img src='cid:{$cid}'>", $body);
            } else {
                $body = str_replace('<GRAPH>', "<br><img src='" . $val['file'] . "'><br>Could not open!<br>" . $val['file'], $body);
            }
            $i++;
        }
    } elseif (is_array($attachments) && sizeof($attachments) && substr_count($body, '<GRAPH:') > 0) {
        foreach ($attachments as $attachment) {
            if ($attachment['attachment'] != '') {
                /* get content id and create attachment */
                $cid = getmypid() . '_' . $i . '@' . 'localhost';
                /* attempt to attach */
                if ($mail->addStringEmbeddedImage($attachment['attachment'], $cid, $attachment['filename'], 'base64', $attachment['mime_type'], $attachment['inline']) === false) {
                    cacti_log('ERROR: ' . $mail->ErrorInfo, false);
                    return $mail->ErrorInfo;
                }
                /* handle the body text */
                switch ($attachment['inline']) {
                    case 'inline':
                        $body = str_replace('<GRAPH:' . $attachment['graphid'] . ':' . $attachment['timespan'] . '>', "<img border='0' src='cid:{$cid}' >", $body);
                        break;
                    case 'attachment':
                        $body = str_replace('<GRAPH:' . $attachment['graphid'] . ':' . $attachment['timespan'] . '>', '', $body);
                        break;
                }
            } else {
                $body = str_replace('<GRAPH:' . $attachment['graphid'] . ':' . $attachment['timespan'] . '>', "<img border='0' src='" . $attachment['filename'] . "' ><br>Could not open!<br>" . $attachment['filename'], $body);
            }
            $i++;
        }
    }
    /* process custom headers */
    if (is_array($headers) && sizeof($headers)) {
        foreach ($headers as $name => $value) {
            $mail->addCustomHeader($name, $value);
        }
    }
    // Set both html and non-html bodies
    $text = array('text' => '', 'html' => '');
    if ($body_text != '' && $html == true) {
        $text['html'] = $body . '<br>';
        $text['text'] = $body_text;
        $mail->isHTML(true);
        $mail->Body = $text['html'];
        $mail->AltBody = $text['text'];
    } elseif ($attachments == '' && $html == false) {
        if ($body_text != '') {
            $body = $body_text;
        } else {
            $body = str_replace('<br>', "\n", $body);
            $body = str_replace('<BR>', "\n", $body);
            $body = str_replace('</BR>', "\n", $body);
        }
        $text['text'] = strip_tags($body);
        $mail->isHTML(false);
        $mail->Body = $text['text'];
        $mail->AltBody = $text['text'];
    } else {
        $text['html'] = $body . '<br>';
        $text['text'] = strip_tags(str_replace('<br>', "\n", $body));
        $mail->isHTML(true);
        $mail->Body = $text['html'];
        $mail->AltBody = $text['text'];
    }
    if ($mail->send()) {
        return '';
    } else {
        return $mail->ErrorInfo;
    }
}