retrieveSettings();
if(isset($admin->settings['disclosure_enable']) && !empty($admin->settings['disclosure_enable'])) {
$this->disclosureEnabled = true;
$this->disclosureText = $admin->settings['disclosure_text'];
}
$this->oe = new OutboundEmail();
$this->oe->getUserMailerSettings($current_user);
$this->SetLanguage('en', 'include/phpmailer/language/');
$this->PluginDir = 'include/phpmailer/';
$this->Mailer = 'sendmail';
// cn: i18n
$this->CharSet = $locale->getPrecedentPreference('default_email_charset');
$this->Encoding = 'quoted-printable';
$this->IsHTML(false); // default to plain-text email
$this->Hostname = $sugar_config['host_name'];
$this->WordWrap = 996;
// cn: gmail fix
$this->protocol = ($this->oe->mail_smtpssl == 1) ? "ssl://" : $this->protocol;
}
/**
* Prefills outbound details
*/
function setMailer() {
global $current_user;
require_once("include/OutboundEmail/OutboundEmail.php");
$oe = new OutboundEmail();
$oe = $oe->getUserMailerSettings($current_user, $mailer_id, $ieId);
// ssl or tcp - keeping outside isSMTP b/c a default may inadvertantly set ssl://
$this->protocol = ($oe->mail_smtpssl) ? "ssl://" : "tcp://";
if($oe->mail_sendtype == "SMTP") {
$this->Mailer = "smtp";
$this->Host = $oe->mail_smtpserver;
$this->Port = $oe->mail_smtpport;
if($oe->mail_smtpauth_req) {
$this->SMTPAuth = TRUE;
$this->Username = $oe->mail_smtpuser;
$this->Password = $oe->mail_smtppass;
}
} else {
$this->Mailer = "sendmail";
}
}
/**
* Prefills mailer for system
*/
function setMailerForSystem() {
require_once("include/OutboundEmail/OutboundEmail.php");
$oe = new OutboundEmail();
$oe = $oe->getSystemMailerSettings();
// ssl or tcp - keeping outside isSMTP b/c a default may inadvertantly set ssl://
$this->protocol = ($oe->mail_smtpssl) ? "ssl://" : "tcp://";
if($oe->mail_sendtype == "SMTP") {
$this->Mailer = "smtp";
$this->Host = $oe->mail_smtpserver;
$this->Port = $oe->mail_smtpport;
if($oe->mail_smtpauth_req) {
$this->SMTPAuth = TRUE;
$this->Username = $oe->mail_smtpuser;
$this->Password = $oe->mail_smtppass;
}
} else {
$this->Mailer = "sendmail";
}
}
/**
* Initiates a connection to an SMTP server. Returns false if the
* operation failed.
* @access private
* @return bool
*/
function SmtpConnect() {
if(!class_exists('SMTP')) {
include($this->PluginDir.'class.smtp.php');
}
if($this->smtp == NULL) { $this->smtp = new SMTP(); }
$this->smtp->do_debug = $this->SMTPDebug;
$hosts = explode(";", $this->Host);
$index = 0;
$connection = ($this->smtp->Connected());
// Retry while there is no connection
while($index < count($hosts) && $connection == false)
{
if(strstr($hosts[$index], ":"))
list($host, $port) = explode(":", $hosts[$index]);
else
{
$host = $this->protocol.$hosts[$index]; // cn: to enable gmail over ssl
$port = $this->Port;
}
if($this->smtp->Connect($host, $port, $this->Timeout))
{
if ($this->Helo != '')
$this->smtp->Hello($this->Helo);
else
$this->smtp->Hello($this->ServerHostname());
if($this->SMTPAuth)
{
if(!$this->smtp->Authenticate($this->Username,
$this->Password))
{
$this->SetError($this->Lang("authenticate"));
$this->smtp->Reset();
$connection = false;
}
}
$connection = true;
}
$index++;
}
if(!$connection)
$this->SetError($this->Lang("connect_host"));
return $connection;
}
/**
* Attaches all fs, string, and binary attachments to the message.
* Returns an empty string on failure.
* @access private
* @return string
*/
function AttachAll() {
// Return text of body
$mime = array();
// Add all attachments
for($i = 0; $i < count($this->attachment); $i++) {
// Check for string attachment
$bString = $this->attachment[$i][5];
if ($bString) {
$string = $this->attachment[$i][0];
} else {
$path = $this->attachment[$i][0];
}
// cn: overriding parent class' method to perform encode on the following
$filename = $this->EncodeHeader(trim($this->attachment[$i][1]));
$name = $this->EncodeHeader(trim($this->attachment[$i][2]));
$encoding = $this->attachment[$i][3];
$type = $this->attachment[$i][4];
$disposition = $this->attachment[$i][6];
$cid = $this->attachment[$i][7];
$mime[] = sprintf("--%s%s", $this->boundary[1], $this->LE);
$mime[] = sprintf("Content-Type: %s; name=\"%s\"%s", $type, $name, $this->LE);
$mime[] = sprintf("Content-Transfer-Encoding: %s%s", $encoding, $this->LE);
if($disposition == "inline") {
$mime[] = sprintf("Content-ID: <%s>%s", $cid, $this->LE);
}
$mime[] = sprintf("Content-Disposition: %s; filename=\"%s\"%s", $disposition, $name, $this->LE.$this->LE);
// Encode as string attachment
if($bString) {
$mime[] = $this->EncodeString($string, $encoding);
if($this->IsError()) { return ""; }
$mime[] = $this->LE.$this->LE;
} else {
$mime[] = $this->EncodeFile($path, $encoding);
if($this->IsError()) {
return "";
}
$mime[] = $this->LE.$this->LE;
}
}
$mime[] = sprintf("--%s--%s", $this->boundary[1], $this->LE);
return join("", $mime);
}
/**
* handles Charset translation for all visual parts of the email.
* @param string charset Default = ''
*/
function prepForOutbound() {
global $locale;
if($this->preppedForOutbound == false) {
$this->preppedForOutbound = true; // flag so we don't redo this
$OBCharset = $locale->getPrecedentPreference('default_email_charset');
// handle disclosure
if($this->disclosureEnabled) {
$this->Body .= "
{$this->disclosureText}";
$this->AltBody .= "\r\r{$this->disclosureText}";
}
// body text
$this->Body = from_html($locale->translateCharset(trim($this->Body), 'UTF-8', $OBCharset));
$this->AltBody = from_html($locale->translateCharset(trim($this->AltBody), 'UTF-8', $OBCharset));
$subjectUTF8 = from_html(trim($this->Subject));
$subject = $locale->translateCharset($subjectUTF8, 'UTF-8', $OBCharset);
$this->Subject = $locale->translateCharset($subjectUTF8, 'UTF-8', $OBCharset);
// HTML email RFC compliance
if($this->ContentType == "text/html") {
if(strpos($this->Body, '