server/lib/private/mail.php

149 lines
3.8 KiB
PHP
Raw Normal View History

<?php
/**
* Copyright (c) 2012 Frank Karlitschek <frank@owncloud.org>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
/**
* OC_Mail
*
* A class to handle mail sending.
*/
class OC_Mail {
/**
2012-08-29 06:38:33 +00:00
* send an email
*
* @param string $toaddress
* @param string $toname
* @param string $subject
* @param string $mailtext
* @param string $fromaddress
* @param string $fromname
* @param integer $html
2013-01-02 18:04:08 +00:00
* @param string $altbody
* @param string $ccaddress
* @param string $ccname
* @param string $bcc
* @throws Exception
*/
2013-02-11 16:44:02 +00:00
public static function send($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
$html=0, $altbody='', $ccaddress='', $ccname='', $bcc='') {
$SMTPMODE = OC_Config::getValue( 'mail_smtpmode', 'sendmail' );
$SMTPHOST = OC_Config::getValue( 'mail_smtphost', '127.0.0.1' );
2013-01-02 18:04:08 +00:00
$SMTPPORT = OC_Config::getValue( 'mail_smtpport', 25 );
2012-08-29 06:38:33 +00:00
$SMTPAUTH = OC_Config::getValue( 'mail_smtpauth', false );
$SMTPAUTHTYPE = OC_Config::getValue( 'mail_smtpauthtype', 'LOGIN' );
2012-08-29 06:38:33 +00:00
$SMTPUSERNAME = OC_Config::getValue( 'mail_smtpname', '' );
$SMTPPASSWORD = OC_Config::getValue( 'mail_smtppassword', '' );
$SMTPDEBUG = OC_Config::getValue( 'mail_smtpdebug', false );
$SMTPTIMEOUT = OC_Config::getValue( 'mail_smtptimeout', 10 );
$SMTPSECURE = OC_Config::getValue( 'mail_smtpsecure', '' );
2012-07-11 19:52:51 +00:00
$mailo = new PHPMailer(true);
if($SMTPMODE=='sendmail') {
$mailo->IsSendmail();
2012-09-07 13:22:01 +00:00
}elseif($SMTPMODE=='smtp') {
$mailo->IsSMTP();
2012-09-07 13:22:01 +00:00
}elseif($SMTPMODE=='qmail') {
$mailo->IsQmail();
}else{
$mailo->IsMail();
}
$mailo->Host = $SMTPHOST;
2013-01-02 18:04:08 +00:00
$mailo->Port = $SMTPPORT;
$mailo->SMTPAuth = $SMTPAUTH;
$mailo->SMTPDebug = $SMTPDEBUG;
$mailo->SMTPSecure = $SMTPSECURE;
$mailo->AuthType = $SMTPAUTHTYPE;
$mailo->Username = $SMTPUSERNAME;
$mailo->Password = $SMTPPASSWORD;
$mailo->Timeout = $SMTPTIMEOUT;
$mailo->From = $fromaddress;
$mailo->FromName = $fromname;;
$mailo->Sender = $fromaddress;
2012-07-11 19:36:27 +00:00
try {
$toaddress = self::buildAsciiEmail($toaddress);
$mailo->AddAddress($toaddress, $toname);
2012-07-11 19:36:27 +00:00
2012-11-02 18:53:02 +00:00
if($ccaddress<>'') $mailo->AddCC($ccaddress, $ccname);
2012-07-11 19:36:27 +00:00
if($bcc<>'') $mailo->AddBCC($bcc);
$mailo->AddReplyTo($fromaddress, $fromname);
$mailo->WordWrap = 50;
if($html==1) $mailo->IsHTML(true); else $mailo->IsHTML(false);
$mailo->Subject = $subject;
if($altbody=='') {
$mailo->Body = $mailtext.OC_MAIL::getfooter();
$mailo->AltBody = '';
}else{
$mailo->Body = $mailtext;
$mailo->AltBody = $altbody;
}
$mailo->CharSet = 'UTF-8';
$mailo->Send();
unset($mailo);
2013-02-11 16:44:02 +00:00
OC_Log::write('mail',
'Mail from '.$fromname.' ('.$fromaddress.')'.' to: '.$toname.'('.$toaddress.')'.' subject: '.$subject,
OC_Log::DEBUG);
2012-07-11 19:36:27 +00:00
} catch (Exception $exception) {
OC_Log::write('mail', $exception->getMessage(), OC_Log::ERROR);
throw($exception);
}
}
/**
2012-06-06 12:18:30 +00:00
* return the footer for a mail
*
*/
public static function getfooter() {
$defaults = new OC_Defaults();
$txt="\n--\n";
$txt.=$defaults->getName() . "\n";
$txt.=$defaults->getSlogan() . "\n";
return($txt);
}
/**
* @param string $emailAddress a given email address to be validated
* @return bool
*/
public static function validateAddress($emailAddress) {
$emailAddress = self::buildAsciiEmail($emailAddress);
return PHPMailer::ValidateAddress($emailAddress);
}
/**
* IDN domains will be properly converted to ascii domains.
*
* @param string $emailAddress
* @return string
*/
public static function buildAsciiEmail($emailAddress) {
2014-03-26 10:17:23 +00:00
if (!function_exists('idn_to_ascii')) {
return $emailAddress;
}
list($name, $domain) = explode('@', $emailAddress, 2);
$domain = idn_to_ascii($domain);
return "$name@$domain";
}
}