replacing PHPMailer with Horde_Mime_Mail and Horde_Mail_Transport_Smtphorde to overcome memory limit when sending mails

This commit is contained in:
Ralf Becker 2014-11-24 23:38:37 +00:00
parent 7f7e013ecf
commit 3e559d2fda
29 changed files with 579 additions and 4326 deletions

View File

@ -124,16 +124,16 @@ class mail_compose
{
$sigPref = array();
}
// split mailaccount (acc_id) and signature (ident_id)
// split mailaccount (acc_id) and identity (ident_id)
if ($_content && isset($_content['mailaccount']))
{
list($_content['mailaccount'], $_content['signatureid']) = explode(':', $_content['mailaccount']);
list($_content['mailaccount'], $_content['mailidentity']) = explode(':', $_content['mailaccount']);
}
//error_log(__METHOD__.__LINE__.array2string($sigPref));
//lang('compose'),lang('from') // needed to be found by translationtools
//error_log(__METHOD__.__LINE__.array2string($_REQUEST).function_backtrace());
//error_log(__METHOD__.__LINE__.array2string($_content).function_backtrace());
$_contentHasSigID = array_key_exists('signatureid',(array)$_content);
$_contentHasSigID = array_key_exists('mailidentity',(array)$_content);
$_contentHasMimeType = array_key_exists('mimeType',(array)$_content);
if (isset($_GET['reply_id'])) $replyID = $_GET['reply_id'];
if (!$replyID && isset($_GET['id'])) $replyID = $_GET['id'];
@ -298,9 +298,9 @@ class mail_compose
$sendOK=false;
$message = $this->errorInfo;
}
if (!empty($_content['signatureid']) && $_content['signatureid'] != $sigPref[$this->mail_bo->profileID])
if (!empty($_content['mailidentity']) && $_content['mailidentity'] != $sigPref[$this->mail_bo->profileID])
{
$sigPref[$this->mail_bo->profileID]=$_content['signatureid'];
$sigPref[$this->mail_bo->profileID]=$_content['mailidentity'];
$GLOBALS['egw']->preferences->add('mail','LastSignatureIDUsed',$sigPref,'user');
// save prefs
$GLOBALS['egw']->preferences->save_repository(true);
@ -448,7 +448,7 @@ class mail_compose
// identity and signatureid; this might trigger that the signature in mail body may have to be altered
if ( !empty($content['body']) &&
(!empty($composeCache['mailaccount']) && !empty($_content['mailaccount']) && $_content['mailaccount'] != $composeCache['mailaccount']) ||
(!empty($composeCache['signatureid']) && !empty($_content['signatureid']) && $_content['signatureid'] != $composeCache['signatureid'])
(!empty($composeCache['mailidentity']) && !empty($_content['mailidentity']) && $_content['mailidentity'] != $composeCache['mailidentity'])
)
{
$buttonClicked = true;
@ -469,8 +469,8 @@ class mail_compose
if ($newSig === false) $newSig = -2;
}
}
$_oldSig = $composeCache['signatureid'];
$_signatureid = ($newSig?$newSig:$_content['signatureid']);
$_oldSig = $composeCache['mailidentity'];
$_signatureid = ($newSig?$newSig:$_content['mailidentity']);
$_currentMode = $_content['mimeType'];
if ($_oldSig != $_signatureid)
{
@ -534,7 +534,7 @@ class mail_compose
unset($rep, $in);
if ($replaced)
{
$content['signatureid'] = $_content['signatureid'] = $presetSig = $_signatureid;
$content['mailidentity'] = $_content['mailidentity'] = $presetSig = $_signatureid;
$found = false; // this way we skip further replacement efforts
}
else
@ -569,24 +569,13 @@ class mail_compose
}
else
{
$content['signatureid'] = $_content['signatureid'] = $presetSig = $_signatureid;
$content['mailidentity'] = $_content['mailidentity'] = $presetSig = $_signatureid;
}
if ($styles)
{
//error_log($styles);
$content['body'] = $styles.$content['body'];
}
/*
if ($_currentMode == 'html')
{
$_content = utf8_decode($_content);
}
$escaped = utf8_encode(str_replace(array("'", "\r", "\n"), array("\\'", "\\r", "\\n"), $_content));
//error_log(__METHOD__.$escaped);
if ($_currentMode == 'html')
else
*/
}
}
@ -902,22 +891,22 @@ class mail_compose
{
$presetSig = (strtolower($_REQUEST['signature']) == 'no' ? -2 : -1);
}
if (($suppressSigOnTop || $content['isDraft']) && !empty($content['signatureid'])) $presetSig = (int)$content['signatureid'];
if (($suppressSigOnTop || $content['isDraft']) && !empty($content['mailidentity'])) $presetSig = (int)$content['mailidentity'];
//if (($suppressSigOnTop || $content['isDraft']) && !empty($content['stationeryID'])) $presetStationery = $content['stationeryID'];
$presetId = NULL;
if (($suppressSigOnTop || $content['isDraft']) && !empty($content['mailaccount'])) $presetId = (int)$content['mailaccount'];
if (!empty($sigPref[$this->mail_bo->profileID]) && (empty($presetSig) || $presetSig==-1 || empty($content['signatureid']) || $content['signatureid']==-1)) $presetSig=$sigPref[$this->mail_bo->profileID];
if (!empty($sigPref[$this->mail_bo->profileID]) && (empty($presetSig) || $presetSig==-1 || empty($content['mailidentity']) || $content['mailidentity']==-1)) $presetSig=$sigPref[$this->mail_bo->profileID];
// fetch the signature, prepare the select box, ...
if (empty($content['signatureid'])) {
$content['signatureid'] = $acc['ident_id'];
if (empty($content['mailidentity'])) {
$content['mailidentity'] = $acc['ident_id'];
}
$disableRuler = false;
//_debug_array(($presetSig ? $presetSig : $content['signatureid']));
//_debug_array(($presetSig ? $presetSig : $content['mailidentity']));
try
{
$signature = emailadmin_account::read_identity(($presetSig ? $presetSig : $content['signatureid']),true);
$signature = emailadmin_account::read_identity(($presetSig ? $presetSig : $content['mailidentity']),true);
}
catch (Exception $e)
{
@ -1013,11 +1002,6 @@ class mail_compose
}
}
//error_log(__METHOD__.__LINE__.array2string($content));
if($content['mimeType'] == 'html') {
$ishtml=1;
} else {
$ishtml=0;
}
// get identities of all accounts as "$acc_id:$ident_id" => $identity
$sel_options['mailaccount'] = $identities = array();
@ -1032,7 +1016,7 @@ class mail_compose
}
// signature stuff set earlier
if ($presetSig) $content['signatureid'] = $presetSig;
if ($presetSig) $content['mailidentity'] = $presetSig;
// end signature stuff
//$content['bcc'] = array('kl@stylite.de','kl@leithoff.net');
@ -1069,7 +1053,7 @@ class mail_compose
if ($_content)
{
//input array of _content had no signature information but was seeded later, and content has a valid setting
if (!$_contentHasSigID && $content['signatureid'] && array_key_exists('signatureid',$_content)) unset($_content['signatureid']);
if (!$_contentHasSigID && $content['mailidentity'] && array_key_exists('mailidentity',$_content)) unset($_content['mailidentity']);
$content = array_merge($content,$_content);
if (!empty($content['folder'])) $sel_options['folder']=$this->ajax_searchFolder(0,true);
@ -1169,8 +1153,8 @@ class mail_compose
$content['mimeType']=0;
}
// join mailaccount and signatureid together again
$content['mailaccount'] .= ':'.$content['signatureid'];
// join again mailaccount and identity
$content['mailaccount'] .= ':'.$content['mailidentity'];
//error_log(__METHOD__.__LINE__.array2string($content));
$etpl->exec('mail.mail_compose.compose',$content,$sel_options,array(),$preserv,2);
@ -1372,12 +1356,12 @@ class mail_compose
if ($mail_bo->folderExists($val)) $this->sessionData['folder'][] = $val;
}
}
if (!empty($addHeadInfo['X-SIGNATURE'])) {
if (!empty($addHeadInfo['X-MAILIDENTITY'])) {
// with the new system it would be the identity
try
{
emailadmin_account::read_identity($addHeadInfo['X-SIGNATURE']);
$this->sessionData['signatureid'] = $addHeadInfo['X-SIGNATURE'];
emailadmin_account::read_identity($addHeadInfo['X-MAILIDENTITY']);
$this->sessionData['mailidentity'] = $addHeadInfo['X-MAILIDENTITY'];
}
catch (Exception $e)
{
@ -1388,12 +1372,12 @@ class mail_compose
$this->sessionData['stationeryID'] = $addHeadInfo['X-STATIONERY'];
}
*/
if (!empty($addHeadInfo['X-IDENTITY'])) {
if (!empty($addHeadInfo['X-MAILACCOUNT'])) {
// with the new system it would the identity is the account id
try
{
emailadmin_account::read($addHeadInfo['X-IDENTITY']);
$this->sessionData['mailaccount'] = $addHeadInfo['X-IDENTITY'];
emailadmin_account::read($addHeadInfo['X-MAILACCOUNT']);
$this->sessionData['mailaccount'] = $addHeadInfo['X-MAILACCOUNT'];
}
catch (Exception $e)
{
@ -2015,83 +1999,59 @@ class mail_compose
function createMessage(egw_mailer $_mailObject, array $_formData, array $_identity, $_convertLinks=false)
{
$mail_bo = $this->mail_bo;
$_mailObject->PluginDir = EGW_SERVER_ROOT."/phpgwapi/inc/";
$activeMailProfile = emailadmin_account::read($this->mail_bo->profileID);
$_mailObject->IsSMTP();
// we make sure the message ID is set here, that way, we make sure its not created on the fly upon header creation
$host = self::_getHostName();
if (empty($_mailObject->MessageID)) $_mailObject->MessageID = '<'.md5(uniqid(time())).'@'.trim($host?$host:'localhost').'>';
$_mailObject->CharSet = $this->displayCharset;
// you need to set the sender, if you work with different identities, since most smtp servers, dont allow
// sending in the name of someone else
if ($_identity['ident_id'] != $activeMailProfile['ident_id'] && !empty($_identity['ident_email']) && strtolower($activeMailProfile['ident_email']) != strtolower($_identity['ident_email']))
{
error_log(__METHOD__.__LINE__.' Faking From/SenderInfo for '.$activeMailProfile['ident_email'].' with ID:'.$activeMailProfile['ident_id'].'. Identitiy to use for sending:'.array2string($_identity));
}
$_mailObject->Sender = (!empty($_identity['ident_email'])? $_identity['ident_email'] : $activeMailProfile['ident_email']);
$_mailObject->From = $_identity['ident_email'];
$_mailObject->FromName = $_mailObject->EncodeHeader(mail_bo::generateIdentityString($_identity,false));
$_mailObject->setFrom($_identity['ident_email'] ? $_identity['ident_email'] : $activeMailProfile['ident_email'],
mail_bo::generateIdentityString($_identity,false));
$_mailObject->Priority = $_formData['priority'];
$_mailObject->Encoding = 'quoted-printable';
$_mailObject->AddCustomHeader('X-Mailer: EGroupware-Mail');
$_mailObject->addHeader('X-Priority', $_formData['priority']);
$_mailObject->addHeader('X-Mailer', 'EGroupware-Mail');
if(!empty($_formData['in-reply-to'])) {
if (stripos($_formData['in-reply-to'],'<')===false) $_formData['in-reply-to']='<'.trim($_formData['in-reply-to']).'>';
//error_log(__METHOD__.__LINE__.'$_mailObject->AddCustomHeader(In-Reply-To: '. $_formData['in-reply-to'].")");
$_mailObject->AddCustomHeader('In-Reply-To: '. $_formData['in-reply-to']);
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(In-Reply-To', $_formData['in-reply-to'].")");
$_mailObject->addHeader('In-Reply-To', $_formData['in-reply-to']);
}
if(!empty($_formData['references'])) {
if (stripos($_formData['references'],'<')===false) $_formData['references']='<'.trim($_formData['references']).'>';
//error_log(__METHOD__.__LINE__.'$_mailObject->AddCustomHeader(References: '. $_formData['references'].")");
$_mailObject->AddCustomHeader('References: '. $_formData['references']);
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(References', $_formData['references'].")");
$_mailObject->addHeader('References', $_formData['references']);
}
if(!empty($_formData['thread-topic'])) {
//error_log(__METHOD__.__LINE__.'$_mailObject->AddCustomHeader(Tread-Topic: '. $_formData['thread-topic'].")");
$_mailObject->AddCustomHeader('Thread-Topic: '. $_formData['thread-topic']);
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(Tread-Topic', $_formData['thread-topic'].")");
$_mailObject->addHeader('Thread-Topic', $_formData['thread-topic']);
}
if(!empty($_formData['thread-index'])) {
//error_log(__METHOD__.__LINE__.'$_mailObject->AddCustomHeader(Tread-Index: '. $_formData['thread-index'].")");
$_mailObject->AddCustomHeader('Thread-Index: '. $_formData['thread-index']);
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(Tread-Index', $_formData['thread-index'].")");
$_mailObject->addHeader('Thread-Index', $_formData['thread-index']);
}
if(!empty($_formData['list-id'])) {
//error_log(__METHOD__.__LINE__.'$_mailObject->AddCustomHeader(List-Id: '. $_formData['list-id'].")");
$_mailObject->AddCustomHeader('List-Id: '. $_formData['list-id']);
//error_log(__METHOD__.__LINE__.'$_mailObject->addHeader(List-Id', $_formData['list-id'].")");
$_mailObject->addHeader('List-Id', $_formData['list-id']);
}
//error_log(__METHOD__.__LINE__.' notify to:'.$_identity['ident_email'].'->'.array2string($_formData));
if($_formData['disposition']=='on') {
$_mailObject->AddCustomHeader('Disposition-Notification-To: '. $_identity['ident_email']);
$_mailObject->addHeader('Disposition-Notification-To', $_identity['ident_email']);
}
if(!empty($_identity->organization) && (mail_bo::$mailConfig['how2displayIdentities'] == '' || mail_bo::$mailConfig['how2displayIdentities'] == 'orgNemail')) {
#$_mailObject->AddCustomHeader('Organization: '. $mail_bo->encodeHeader($_identity->organization, 'q'));
$_mailObject->AddCustomHeader('Organization: '. $_identity['ident_org']);
$_mailObject->addHeader('Organization', $_identity['ident_org']);
}
// Expand any mailing lists
foreach(array(
'to' => 'AddAddress',
'cc' => 'AddCC',
'bcc' => 'AddBCC',
'replyto' => 'AddReplyto') as $field => $method)
foreach(array('to', 'cc', 'bcc', 'replyto') as $field)
{
if ($field != 'replyto') $_formData[$field] = self::resolveEmailAddressList($_formData[$field]);
foreach((array)$_formData[$field] as $address)
{
foreach(emailadmin_imapbase::parseAddressList($address) as $addressObject) {
if (!$addressObject->valid) continue;
$_emailAddress = $addressObject->mailbox. ($addressObject->host ? '@'.$addressObject->host : '');
$emailAddress = $addressObject->mailbox. ($addressObject->host ? '@'.$mail_bo->idna2->encode($addressObject->host) : '');
$_mailObject->$method($emailAddress, str_replace(array('@'),' ',($addressObject->personal?$addressObject->personal:$_emailAddress)));
}
}
if ($_formData[$field]) $_mailObject->addAddress($_formData[$field], '', $field);
}
//$_mailObject->WordWrap = 76; // as we break lines ourself, we will not need/use the buildin WordWrap
#$_mailObject->Subject = $mail_bo->encodeHeader($_formData['subject'], 'q');
$_mailObject->Subject = $_formData['subject'];
#$realCharset = mb_detect_encoding($_formData['body'] . 'a' , strtoupper($this->displayCharset).',UTF-8, ISO-8859-1');
#error_log("bocompose::createMessage:".$realCharset);
$_mailObject->addHeader('Subject', $_formData['subject']);
// this should never happen since we come from the edit dialog
if (mail_bo::detect_qp($_formData['body'])) {
//error_log("Error: bocompose::createMessage found QUOTED-PRINTABLE while Composing Message. Charset:$realCharset Message:".print_r($_formData['body'],true));
@ -2119,40 +2079,42 @@ class mail_compose
$signature = mail_bo::merge($signature,array($GLOBALS['egw']->accounts->id2name($GLOBALS['egw_info']['user']['account_id'],'person_id')));
}
if($_formData['mimeType'] =='html') {
$_mailObject->IsHTML(true);
if(!empty($signature)) {
$_mailObject->Body = $_formData['body'] .
($disableRuler ?'<br>':'<hr style="border:1px dotted silver; width:90%;">').
$signature;
$_mailObject->AltBody = $this->convertHTMLToText($_formData['body'],true,true).
if($_formData['mimeType'] == 'html')
{
$body = $_formData['body'];
if(!empty($signature))
{
$body .= ($disableRuler ?'<br>':'<hr style="border:1px dotted silver; width:90%;">').$signature;
$_mailObject->setBody($this->convertHTMLToText($_formData['body'],true,true).
($disableRuler ?"\r\n":"\r\n-- \r\n").
$this->convertHTMLToText($signature,true,true);
#print "<pre>$_mailObject->AltBody</pre>";
} else {
$_mailObject->Body = $_formData['body'];
$_mailObject->AltBody = $this->convertHTMLToText($_formData['body'],true,true);
$this->convertHTMLToText($signature,true,true));
}
else
{
$body = $_formData['body'];
$_mailObject->setBody($this->convertHTMLToText($_formData['body'],true,true));
}
// convert URL Images to inline images - if possible
if ($_convertLinks) mail_bo::processURL2InlineImages($_mailObject, $_mailObject->Body);
if (strpos($_mailObject->Body,"<!-- HTMLSIGBEGIN -->")!==false)
if ($_convertLinks) mail_bo::processURL2InlineImages($_mailObject, $body);
if (strpos($body,"<!-- HTMLSIGBEGIN -->")!==false)
{
$_mailObject->Body = str_replace(array('<!-- HTMLSIGBEGIN -->','<!-- HTMLSIGEND -->'),'',$_mailObject->Body);
$body = str_replace(array('<!-- HTMLSIGBEGIN -->','<!-- HTMLSIGEND -->'),'',$body);
}
$_mailObject->setHtmlBody($body, null, false); // false = no automatic alternative, we called setBody()
} else {
$_mailObject->IsHTML(false);
$_mailObject->Body = $this->convertHTMLToText($_formData['body'],false);
$body = $this->convertHTMLToText($_formData['body'],false);
#$_mailObject->Body = $_formData['body'];
if(!empty($signature)) {
$_mailObject->Body .= ($disableRuler ?"\r\n":"\r\n-- \r\n").
$body .= ($disableRuler ?"\r\n":"\r\n-- \r\n").
$this->convertHTMLToText($signature,true,true);
}
$_mailObject->setBody($body);
}
// add the attachments
$mail_bo->openConnection();
if (is_array($_formData) && isset($_formData['attachments']))
{
$connection_opened = false;
//error_log(__METHOD__.__LINE__.array2string($_formData['attachments']));
$tnfattachments = null;
foreach((array)$_formData['attachments'] as $attachment) {
@ -2168,6 +2130,11 @@ class mail_compose
[size] => 622379
[folder] => INBOX))
*/
if (!$connection_opened)
{
$mail_bo->openConnection();
$connection_opened = true;
}
$mail_bo->reopen($attachment['folder']);
switch($attachment['type']) {
case 'MESSAGE/RFC822':
@ -2176,7 +2143,7 @@ class mail_compose
$rawHeader = $mail_bo->getMessageRawHeader($attachment['uid'], $attachment['partID'],$attachment['folder']);
}
$rawBody = $mail_bo->getMessageRawBody($attachment['uid'], $attachment['partID'],$attachment['folder']);
$_mailObject->AddStringAttachment($rawHeader.$rawBody, $_mailObject->EncodeHeader($attachment['name']), '7bit', 'message/rfc822');
$_mailObject->AddStringAttachment($rawHeader.$rawBody, $attachment['name'], '7bit', 'message/rfc822');
break;
default:
$attachmentData = $mail_bo->getAttachment($attachment['uid'], $attachment['partID'],0,false);
@ -2194,9 +2161,8 @@ class mail_compose
}
}
}
$_mailObject->AddStringAttachment($attachmentData['attachment'], $_mailObject->EncodeHeader($attachment['name']), 'base64', $attachment['type']);
$_mailObject->AddStringAttachment($attachmentData['attachment'], $attachment['name'], 'base64', $attachment['type']);
break;
}
}
else
@ -2210,25 +2176,17 @@ class mail_compose
{
$tmp_path = $GLOBALS['egw_info']['server']['temp_dir'].SEP.basename($attachment['file']);
}
if (isset($attachment['type']) && stripos($attachment['type'],"text/calendar; method=")!==false )
{
$_mailObject->AltExtended = file_get_contents($tmp_path);
$_mailObject->AltExtendedContentType = $attachment['type'];
}
else
{
$_mailObject->AddAttachment (
$tmp_path,
$_mailObject->EncodeHeader($attachment['name']),
strtoupper($attachment['type'])=='MESSAGE/RFC822' ? '7bit' : 'base64',
$attachment['type']
);
}
$_mailObject->AddAttachment (
$tmp_path,
$attachment['name'],
strtoupper($attachment['type'])=='MESSAGE/RFC822' ? '7bit' : 'base64',
$attachment['type']
);
}
}
}
if ($connection_opened) $mail_bo->closeConnection();
}
$mail_bo->closeConnection();
}
/**
@ -2248,9 +2206,9 @@ class mail_compose
}
$formData = array_merge($content, array(
'isDrafted' => 1,
'body' => $content['mail_'.($content['mimeType']?'htmltext':'plaintext')],
'mimeType' => $content['mimeType']?'html':'plain' // checkbox has only true|false value
'isDrafted' => 1,
'body' => $content['mail_'.($content['mimeType']?'htmltext':'plaintext')],
'mimeType' => $content['mimeType']?'html':'plain' // checkbox has only true|false value
));
//Saving draft procedure
@ -2315,7 +2273,8 @@ class mail_compose
static function resolveEmailAddressList($_emailAddressList)
{
$addrFromList=array();
foreach((array)$_emailAddressList as $ak => $address) {
foreach((array)$_emailAddressList as $ak => $address)
{
if(is_int($address))
{
// List was selected, expand to addresses
@ -2348,12 +2307,12 @@ class mail_compose
function saveAsDraft($_formData, &$savingDestination='')
{
$mail_bo = $this->mail_bo;
$mail = new egw_mailer();
$mail = new egw_mailer($this->mail_bo->profileID);
// preserve the bcc and if possible the save to folder information
$this->sessionData['folder'] = $_formData['folder'];
$this->sessionData['bcc'] = $_formData['bcc'];
$this->sessionData['signatureid'] = $_formData['signatureid'];
$this->sessionData['mailidentity'] = $_formData['mailidentity'];
//$this->sessionData['stationeryID'] = $_formData['stationeryID'];
$this->sessionData['mailaccount'] = $_formData['mailaccount'];
$this->sessionData['attachments'] = $_formData['attachments'];
@ -2369,25 +2328,18 @@ class mail_compose
}
$flags = '\\Seen \\Draft';
$BCCmail = '';
$this->createMessage($mail, $_formData, $identity);
$this->sessionData['bcc'] = self::resolveEmailAddressList($this->sessionData['bcc']);
foreach((array)$this->sessionData['bcc'] as $address) {
foreach(emailadmin_imapbase::parseAddressList($address) as $addressObject) {
$emailAddress = $addressObject->mailbox. ($addressObject->host ? '@'.$addressObject->host : '');
$mailAddr[] = array($emailAddress, $addressObject->personal);
}
}
// folder list as Customheader
if (!empty($this->sessionData['folder']))
{
$folders = implode('|',array_unique($this->sessionData['folder']));
$mail->AddCustomHeader("X-Mailfolder: $folders");
$mail->addHeader('X-Mailfolder', $folders);
}
$mail->AddCustomHeader('X-Signature: '.$this->sessionData['signatureid']);
//$mail->AddCustomHeader('X-Stationery: '.$this->sessionData['stationeryID']);
$mail->AddCustomHeader('X-Identity: '.(int)$this->sessionData['mailaccount']);
$mail->addHeader('X-Mailidentity', $this->sessionData['mailidentity']);
//$mail->addHeader('X-Stationery', $this->sessionData['stationeryID']);
$mail->addHeader('X-Mailaccount', (int)$this->sessionData['mailaccount']);
// decide where to save the message (default to draft folder, if we find nothing else)
// if the current folder is in draft or template folder save it there
// if it is called from printview then save it with the draft folder
@ -2404,16 +2356,14 @@ class mail_compose
}
if ( !empty($_formData['printit']) && $_formData['printit'] == 0 ) $savingDestination = $mail_bo->getDraftFolder();
if (count($mailAddr)>0) $BCCmail = $mail->AddrAppend("Bcc",$mailAddr);
//error_log(__METHOD__.__LINE__.$BCCmail.$mail->getMessageHeader().$mail->getMessageBody());
// normaly Bcc is only added to recipients, but not as header visible to all recipients
$mail->forceBccHeader();
$mail_bo->openConnection();
if ($mail_bo->folderExists($savingDestination,true)) {
try
{
$messageUid = $mail_bo->appendMessage($savingDestination,
$BCCmail.$mail->getMessageHeader(),
$mail->getMessageBody(),
$flags);
$messageUid = $mail_bo->appendMessage($savingDestination, $mail->getRaw(), null, $flags);
}
catch (egw_exception_wrong_userinput $e)
{
@ -2432,7 +2382,7 @@ class mail_compose
function send($_formData)
{
$mail_bo = $this->mail_bo;
$mail = new egw_mailer();
$mail = new egw_mailer($this->mail_bo->profileID);
$messageIsDraft = false;
$this->sessionData['mailaccount'] = $_formData['mailaccount'];
@ -2444,7 +2394,7 @@ class mail_compose
$this->sessionData['subject'] = trim($_formData['subject']);
$this->sessionData['body'] = $_formData['body'];
$this->sessionData['priority'] = $_formData['priority'];
$this->sessionData['signatureid'] = $_formData['signatureid'];
$this->sessionData['mailidentity'] = $_formData['mailidentity'];
//$this->sessionData['stationeryID'] = $_formData['stationeryID'];
$this->sessionData['disposition'] = $_formData['disposition'];
$this->sessionData['mimeType'] = $_formData['mimeType'];
@ -2500,14 +2450,14 @@ class mail_compose
}
try
{
$identity = emailadmin_account::read_identity((int)$this->sessionData['signatureid'],true);
$identity = emailadmin_account::read_identity((int)$this->sessionData['mailidentity'],true);
}
catch (Exception $e)
{
$identity = array();
}
//error_log($this->sessionData['mailaccount']);
//error_log(__METHOD__.__LINE__.':'.array2string($this->sessionData['signatureid']).'->'.array2string($identity));
//error_log(__METHOD__.__LINE__.':'.array2string($this->sessionData['mailidentity']).'->'.array2string($identity));
// create the messages
$this->createMessage($mail, $_formData, $identity, true);
// remember the identity
@ -2524,20 +2474,6 @@ class mail_compose
// sentFolder is account specific
$sentFolder = $this->mail_bo->getSentFolder();
if (!$this->mail_bo->folderExists($sentFolder, true)) $sentFolder=false;
// we do not fake the sender (anymore), we use the account settings for server and authentication of the choosen account
$ogServer = $this->mail_bo->ogServer;
//_debug_array($ogServer);
$mail->Host = $ogServer->host;
$mail->Port = $ogServer->port;
// SMTP Auth??
if($ogServer->smtpAuth) {
$mail->SMTPAuth = true;
// check if username contains a ; -> then a sender is specified (and probably needed)
list($username,$senderadress) = explode(';', $ogServer->username,2);
if (isset($senderadress) && !empty($senderadress)) $mail->Sender = $senderadress;
$mail->Username = $username;
$mail->Password = $ogServer->password;
}
// we switch back from authentication data to the account we used to work on
if ($_formData['serverID']!=$_formData['mailaccount'])
@ -2598,20 +2534,9 @@ class mail_compose
try {
$mail->Send();
}
catch(phpmailerException $e) {
$this->errorInfo = $e->getMessage();
if ($mail->ErrorInfo) // use the complete mailer ErrorInfo, for full Information
{
if (stripos($mail->ErrorInfo, $this->errorInfo)===false)
{
$this->errorInfo = $mail->ErrorInfo.'<br>'.$this->errorInfo;
}
else
{
$this->errorInfo = $mail->ErrorInfo;
}
}
error_log(__METHOD__.__LINE__.array2string($this->errorInfo));
catch(Exception $e) {
_egw_log_exception($e);
$this->errorInfo = $e->getMessage().($e->detail ? ': '.$e->detail : '');
return false;
}
} else {
@ -2636,16 +2561,9 @@ class mail_compose
// if copying mail to folder, or saving mail to infolog, we need to gather the needed information
if (count($folder) > 0 || $_formData['to_infolog'] == 'on' || $_formData['to_tracker'] == 'on') {
//error_log(__METHOD__.__LINE__.array2string($this->sessionData['bcc']));
foreach((array)$this->sessionData['bcc'] as $address) {
foreach(emailadmin_imapbase::parseAddressList($address) as $addressObject) {
$emailAddress = $addressObject->mailbox. ($addressObject->host ? '@'.$addressObject->host : '');
$mailAddr[] = array($emailAddress, $addressObject->personal);
}
}
$BCCmail='';
if (count($mailAddr)>0) $BCCmail = $mail->AddrAppend("Bcc",$mailAddr);
$sentMailHeader = $BCCmail.$mail->getMessageHeader();
$sentMailBody = $mail->getMessageBody();
// normaly Bcc is only added to recipients, but not as header visible to all recipients
$mail->forceBccHeader();
}
// copying mail to folder
if (count($folder) > 0)
@ -2669,10 +2587,7 @@ class mail_compose
try
{
//error_log(__METHOD__.__LINE__.array2string($folderName));
$mail_bo->appendMessage($folderName,
$sentMailHeader,
$sentMailBody,
$flags);
$mail_bo->appendMessage($folderName, $mail->getRaw(), null, $flags);
}
catch (egw_exception_wrong_userinput $e)
{
@ -2699,10 +2614,7 @@ class mail_compose
{
$flags = '\\Seen';
//error_log(__METHOD__.__LINE__.array2string($folderName));
$this->mail_bo->appendMessage($sentFolder,
$sentMailHeader,
$sentMailBody,
$flags);
$this->mail_bo->appendMessage($sentFolder, $mail->getRaw(), null, $flags);
}
catch (egw_exception_wrong_userinput $e)
{
@ -2819,9 +2731,7 @@ class mail_compose
if(is_array($this->sessionData['attachments'])) {
reset($this->sessionData['attachments']);
while(list($key,$value) = @each($this->sessionData['attachments'])) {
#print "$key: ".$value['file']."<br>";
foreach($this->sessionData['attachments'] as $value) {
if (!empty($value['file']) && parse_url($value['file'],PHP_URL_SCHEME) != 'vfs') { // happens when forwarding mails
unlink($value['file']);
}
@ -2860,8 +2770,8 @@ class mail_compose
}
}
if ((!isset($content['mailaccount']) || empty($content['mailaccount'])) && $id) $content['signatureid'] = $id;
if (!isset($content['signatureid']) || empty($content['signatureid'])) $content['signatureid'] = $id;
if ((!isset($content['mailaccount']) || empty($content['mailaccount'])) && $id) $content['mailidentity'] = $id;
if (!isset($content['mailidentity']) || empty($content['mailidentity'])) $content['mailidentity'] = $id;
if (!isset($content['mimeType']) || empty($content['mimeType']))
{
$content['mimeType'] = 'html';

View File

@ -16,28 +16,481 @@ require_once(EGW_API_INC.'/class.phpmailer.inc.php');
* Log mails to log file specified in $GLOBALS['egw_info']['server']['log_mail']
* or regular error_log for true (can be set either in DB or header.inc.php).
*
* New egw_mailer object uses Horde Mime Mail class with compatibility methods for
* old PHPMailer methods and class variable assignments.
*
* This class does NOT use anything EGroupware specific, it acts like PHPMail, but logs.
*/
class egw_mailer extends PHPMailer
class egw_mailer extends Horde_Mime_Mail
{
/**
* Constructor: always throw exceptions instead of echoing errors and EGw pathes
* Mail account used for sending mail
*
* @var emailadmin_account
*/
function __construct()
{
parent::__construct(true); // throw exceptions instead of echoing errors
protected $account;
// setting EGroupware specific path for PHPMailer lang files
if (!empty($GLOBALS['egw_info']['user']['preferences']['common']['lang'])) list($lang,$nation) = explode('-',$GLOBALS['egw_info']['user']['preferences']['common']['lang']);
$lang_path = EGW_SERVER_ROOT.'/phpgwapi/lang/';
if ($nation && file_exists($lang_path."phpmailer.lang-$nation.php")) // atm. only for pt-br => br
/**
*
* @var Horde_Mail_Rfc822_List
*/
protected $to;
protected $cc;
protected $bcc;
protected $replyto;
/**
* Constructor: always throw exceptions instead of echoing errors and EGw pathes
*
* @param int|emailadmin_account $account =null mail account to use, default use emailadmin_account::get_default($smtp=true)
*/
function __construct($account=null)
{
parent::__construct();
$this->_headers->setUserAgent('EGroupware API '.$GLOBALS['egw_info']['server']['versions']['phpgwapi']);
$this->setAccount($account);
$this->is_html = false;
$this->ClearAddresses();
$this->clearParts();
}
/**
* Clear all addresses
*/
function clearAddresses()
{
// clear all addresses
$this->to = new Horde_Mail_Rfc822_List();
$this->cc = new Horde_Mail_Rfc822_List();
$this->bcc = new Horde_Mail_Rfc822_List();
$this->replyto = new Horde_Mail_Rfc822_List();
}
/**
* Set mail account to use for sending
*
* @param int|emailadmin_account $account =null mail account to use, default use emailadmin_account::get_default($smtp=true)
* @throws egw_exception_not_found if account was not found (or not valid for current user)
*/
function setAccount($account=null)
{
if (is_a($account, 'emailadmin_account'))
{
$lang = $nation;
$this->account = $account;
}
if (!$this->SetLanguage((empty($lang)?'en':$lang),$lang_path))
elseif ($account > 0)
{
$this->SetLanguage('en',$lang_path); // use English default
$this->account = emailadmin_account::read($account);
}
else
{
$this->account = emailadmin_account::get_default(true); // true = need an SMTP (not just IMAP) account
}
// use smpt-username as sender, if available, but only if it is a full email address
$sender = $this->account->acc_smtp_username && strpos($this->account->acc_smtp_username, '@') !== false ?
$this->account->acc_smtp_username : $this->account->ident_email;
$name = $this->account->ident_realname ? $this->account->ident_realname : $sender;
$this->setFrom($sender, $name);
}
/**
* Set From and Return-Path header
*
* @param string $address
* @param string $personal =''
*/
public function setFrom($address, $personal='')
{
$this->addHeader('Return-Path', '<'.$address.'>', true);
$this->addHeader('From', self::add_personal($address, $personal));
}
/**
* Add one or multiple addresses to To, Cc, Bcc or Reply-To
*
* @param string|array|Horde_Mail_Rfc822_List $address
* @param string $personal ='' only used if $address is a string
* @param string $type ='to' type of address to add "to", "cc", "bcc" or "replyto"
*/
function addAddress($address, $personal='', $type='to')
{
static $type2header = array(
'to' => 'To',
'cc' => 'Cc',
'bcc' => 'Bcc',
'replyto' => 'Reply-To',
);
if (!isset($type2header[$type]))
{
throw new egw_exception_wrong_parameter("Unknown type '$type'!");
}
if ($personal) $address = self::add_personal ($address, $personal);
// add to our local list
$this->$type->add($address);
// add as header
$this->addHeader($type2header[$type], $this->$type, true);
}
/**
* Write Bcc as header for storing in sent or as draft
*
* Bcc is normally only add to recipients while sending, but not added visible as header!
*/
function forceBccHeader()
{
$this->_headers->removeHeader('Bcc');
$this->_headers->addHeader('Bcc', $this->bcc);
}
/**
* Add personal part to email address
*
* @param string $address
* @param string $personal
* @return string Rfc822 address
*/
static function add_personal($address, $personal)
{
if (is_string($address) && !empty($personal))
{
//if (!preg_match('/^[!#$%&\'*+/0-9=?A-Z^_`a-z{|}~-]+$/u', $personal)) // that's how I read the rfc(2)822
if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) // but quoting is never wrong, so quote more then necessary
{
$personal = '"'.str_replace(array('\\', '"'),array('\\\\', '\\"'), $personal).'"';
}
$address = ($personal ? $personal.' <' : '').$address.($personal ? '>' : '');
}
return $address;
}
/**
* Add one or multiple addresses to Cc
*
* @param string|array|Horde_Mail_Rfc822_List $address
* @param string $personal ='' only used if $address is a string
*/
function AddCc($address, $personal=null)
{
$this->AddAddress($address, $personal, 'cc');
}
/**
* Add one or multiple addresses to Bcc
*
* @param string|array|Horde_Mail_Rfc822_List $address
* @param string $personal ='' only used if $address is a string
*/
function AddBcc($address, $personal=null)
{
$this->AddAddress($address, $personal, 'bcc');
}
/**
* Add one or multiple addresses to Reply-To
*
* @param string|array|Horde_Mail_Rfc822_List $address
* @param string $personal ='' only used if $address is a string
*/
function AddReplyTo($address, $personal=null)
{
$this->AddAddress($address, $personal, 'replyto');
}
/**
* Adds an attachment
*
* "text/calendar; method=..." get automatic detected and added as highes priority alternative,
* overwriting evtl. existing html body!
*
* @param string $file The path to the file.
* @param string $name The file name to use for the attachment.
* @param string $type The content type of the file.
* @param string $charset The character set of the part, only relevant for text parts.
* @return integer part-number
* @throws egw_exception_not_found if $file could not be opened for reading
*/
public function addAttachment($file, $name = null, $type = null, $charset = 'us-ascii')
{
// deprecated PHPMailer::AddAttachment($path, $name = '', $encoding = 'base64', $type = 'application/octet-stream') call
if ($type === 'base64')
{
$type = $charset;
$charset = 'us-ascii';
}
// pass file as resource to Horde_Mime_Part::setContent()
if (!($resource = fopen($file, 'r')))
//if (!($resource = file_get_contents($file)))
{
throw new egw_exception_not_found("File '$file' not found!");
}
$part = new Horde_Mime_Part();
$part->setType($type ? $type : egw_vfs::mime_content_type($file));
$part->setContents($resource);
// this should not be necessary, because binary data get detected by mime-type,
// but at least Cyrus complains about NUL characters
$part->setTransferEncoding('base64', array('send' => true));
$part->setName($name ? $name : egw_vfs::basename($file));
// store "text/calendar" as _htmlBody, to trigger "multipart/alternative"
if (stripos($type,"text/calendar; method=") !== false)
{
$this->_htmlBody = $part;
return;
}
$part->setDisposition('attachment');
return $this->addMimePart($part);
}
/**
* Adds a string or binary attachment (non-filesystem) to the list.
*
* "text/calendar; method=..." get automatic detected and added as highes priority alternative,
* overwriting evtl. existing html body!
*
* @param string $content String attachment data.
* @param string $filename Name of the attachment. We assume that this is NOT a path
* @param string $type File extension (MIME) type.
* @return int part-number
*/
public function AddStringAttachment($content, $filename, $type = 'application/octet-stream')
{
// deprecated PHPMailer::AddStringAttachment($content, $filename = '', $encoding = 'base64', $type = 'application/octet-stream') call
if ($type === 'base64' || func_num_args() == 4)
{
$type = func_get_arg(3);
}
$part = new Horde_Mime_Part();
$part->setType($type);
$part->setCharset('utf-8');
$part->setContents($content);
// this should not be necessary, because binary data get detected by mime-type,
// but at least Cyrus complains about NUL characters
$part->setTransferEncoding('base64', array('send' => true));
$part->setName($filename);
// store "text/calendar" as _htmlBody, to trigger "multipart/alternative"
if (stripos($type,"text/calendar; method=") !== false)
{
$this->_htmlBody = $part;
return;
}
$part->setDisposition('attachment');
return $this->addMimePart($part);
}
/**
* Send mail, injecting mail transport from account
*
* @ToDo hooks port hook from SmtpSend
*/
function send()
{
parent::send($this->account->smtpTransport(), true); // true: keep Message-ID
}
/**
* Reset all Settings to send multiple Messages
*/
function ClearAll()
{
$this->__construct($this->account);
}
/**
* Get the raw email data sent by this object.
*
* Reimplement to be able to call it for saveAsDraft by calling
* $this->send(new Horde_Mail_Transport_Null()),
* if no base-part is set, because send is not called before.
*
* @param boolean $stream If true, return a stream resource, otherwise
* @return stream|string The raw email data.
*/
function getRaw($stream=true)
{
try {
$this->getBasePart();
}
catch(Horde_Mail_Exception $e)
{
unset($e);
parent::send(new Horde_Mail_Transport_Null(), true); // true: keep Message-ID
}
return parent::getRaw($stream);
}
/**
* Deprecated PHPMailer compatibility methods
*/
/**
* Get header part of mail
*
* @deprecated use getRaw($stream=true) to get a stream of whole mail containing headers and body
* @return string
*/
function getMessageHeader()
{
try {
$this->getBasePart();
}
catch(Horde_Mail_Exception $e)
{
unset($e);
parent::send(new Horde_Mail_Transport_Null(), true); // true: keep Message-ID
}
return $this->_headers->toString();
}
/**
* Get body part of mail
*
* @deprecated use getRaw($stream=true) to get a stream of whole mail containing headers and body
* @return string
*/
function getMessageBody()
{
try {
$this->getBasePart();
}
catch(Horde_Mail_Exception $e)
{
unset($e);
parent::send(new Horde_Mail_Transport_Null(), true); // true: keep Message-ID
}
return $this->getBasePart()->toString(
array('stream' => false, 'encode' => Horde_Mime_Part::ENCODE_7BIT | Horde_Mime_Part::ENCODE_8BIT | Horde_Mime_Part::ENCODE_BINARY));
}
/**
* Use SMPT
*
* @deprecated not used, SMTP always used
*/
function IsSMTP()
{
}
/**
* @deprecated use AddHeader($header, $value)
*/
function AddCustomHeader($str)
{
$matches = null;
if (preg_match('/^([^:]+): *(.*)$/', $str, $matches))
{
$this->addHeader($matches[1], $matches[2]);
}
}
/**
* @deprecated use clearParts()
*/
function ClearAttachments()
{
$this->clearParts();
}
/**
* @deprecated done by Horde automatic
*/
function EncodeHeader($str/*, $position = 'text'*/)
{
return $str;
}
protected $is_html = false;
/**
* Defines that setting $this->Body should set Body or AltBody
* @param boolean $html
* @deprecated use either setBody() or setHtmlBody()
*/
function isHtml($html)
{
$this->is_html = (bool)$html;
}
protected $from = '';
/**
* Magic method to intercept assignments to old PHPMailer variables
*
* @deprecated use addHeader(), setBody() or setHtmlBody()
* @param type $name
* @param type $value
*/
function __set($name, $value)
{
switch($name)
{
case 'Sender':
$this->addHeader('Return-Path', '<'.$value.'>', true);
break;
case 'From':
case 'FromName':
if (empty($this->from) || $name == 'From' && $this->from[0] == '<')
{
$this->from = $name == 'From' ? '<'.$value.'>' : $value;
}
elseif ($name == 'From')
{
$this->from = self::add_personal($value, $this->from);
}
else
{
$this->from = self::add_personal(substr($this->from, 1, -1), $value);
}
$this->addHeader('From', $this->from, true);
break;
case 'Priority':
$this->AddHeader('X-Priority', $value);
break;
case 'Subject':
$this->AddHeader($name, $value);
break;
case 'MessageID':
$this->AddHeader('Message-ID', $value);
break;
case 'AltExtended':
case 'AltExtendedContentType':
// todo addPart()
break;
case 'Body':
$this->is_html ? $this->setHtmlBody($value, null, false) : $this->setBody($value);
break;
case 'AltBody':
!$this->is_html ? $this->setHtmlBody($value, null, false) : $this->setBody($value);
break;
default:
error_log(__METHOD__."('$name', ".array2string($value).") unsupported attribute '$name' --> ignored");
break;
}
}
/**
* Magic method to intercept readin old PHPMailer variables
*
* @deprecated use getHeader(), etc.
* @param type $name
*/
function __get($name)
{
switch($name)
{
case 'Sender':
return $this->getHeader('Return-Path');
case 'From':
return $this->getHeader('From');
}
error_log(__METHOD__."('$name') unsupported attribute '$name' --> returning NULL");
return null;
}
/**
@ -166,114 +619,4 @@ class egw_mailer extends PHPMailer
throw $e;
}
}
/**
* Creates recipient headers.
*
* Overwritten to get To, Cc and Bcc addresses, which are private in phpMailer
*
* @access public
* @return string
*/
public function AddrAppend($type, $addr)
{
if (is_null($addr)) $addr = array();
foreach($addr as $data)
{
if (!empty($data[0])) $this->addresses[$type][] = $data[0];
}
return parent::AddrAppend($type, $addr);
}
/**
* Adds a "Bcc" address.
*
* Reimplemented as AddrAppend() for Bcc get's NOT called for SMTP!
*
* @param string $address
* @param string $name
* @return boolean true on success, false if address already used
*/
public function AddBCC($address, $name = '')
{
$this->AddrAppend('Bcc', array(array($address,$name)));
return parent::AddBCC($address, $name);
}
/**
* Gets the "ReplyTo" addresses.
*
* Function to retrieve the ReplyTo Addresses of the SMT Mailobject
*
* @return array with the reply-to mail addresse(s))
*/
public function GetReplyTo()
{
return $this->ReplyTo;
}
/**
* Adds a string or binary attachment (non-filesystem) to the list.
* This method can be used to attach ascii or binary data,
* such as a BLOB record from a database.
* @param string $string String attachment data.
* @param string $filename Name of the attachment. We assume that this is NOT a path
* @param string $encoding File encoding (see $Encoding).
* @param string $type File extension (MIME) type.
* @return void
*/
public function AddStringAttachment($string, $filename, $encoding = 'base64', $type = 'application/octet-stream')
{
// Append to $attachment array
//already encoded?
//TODO: maybe add an parameter to AddStringAttachment to avoid using the basename
$x += preg_match('/\?=.+=\?/', $filename);
$this->attachment[] = array(
0 => $string,
1 => $filename,
2 => ($x?basename($filename):$filename),
3 => $encoding,
4 => $type,
5 => true, // isStringAttachment
6 => 'attachment',
7 => 0
);
}
/**
* Clears all recipients assigned in the TO array. Returns void.
*/
public function ClearAddresses() {
$this->addresses['To'] = array();
parent::ClearAddresses();
}
/**
* Clears all recipients assigned in the CC array. Returns void.
*/
public function ClearCCs() {
$this->addresses['Cc'] = array();
parent::ClearCCs();
}
/**
* Clears all recipients assigned in the BCC array. Returns void.
*/
public function ClearBCCs() {
$this->addresses['Bcc'] = array();
parent::ClearBCCs();
}
/**
* Clears all recipients assigned in the TO, CC and BCC array. Returns void.
*/
public function ClearAllRecipients() {
$this->addresses = array();
parent::ClearAllRecipients();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,840 +0,0 @@
<?php
/*~ class.smtp.php
.---------------------------------------------------------------------------.
| Software: PHPMailer - PHP email class |
| Version: 5.1 |
| Contact: via sourceforge.net support pages (also www.codeworxtech.com) |
| Info: http://phpmailer.sourceforge.net |
| Support: http://sourceforge.net/projects/phpmailer/ |
| ------------------------------------------------------------------------- |
| Admin: Andy Prevost (project admininistrator) |
| Authors: Andy Prevost (codeworxtech) codeworxtech@users.sourceforge.net |
| : Marcus Bointon (coolbru) coolbru@users.sourceforge.net |
| Founder: Brent R. Matzelle (original founder) |
| Copyright (c) 2004-2009, Andy Prevost. All Rights Reserved. |
| Copyright (c) 2001-2003, Brent R. Matzelle |
| ------------------------------------------------------------------------- |
| License: Distributed under the Lesser General Public License (LGPL) |
| http://www.gnu.org/copyleft/lesser.html |
| This program is distributed in the hope that it will be useful - WITHOUT |
| ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| FITNESS FOR A PARTICULAR PURPOSE. |
| ------------------------------------------------------------------------- |
| We offer a number of paid services (www.codeworxtech.com): |
| - Web Hosting on highly optimized fast and secure servers |
| - Technology Consulting |
| - Oursourcing (highly qualified programmers and graphic designers) |
'---------------------------------------------------------------------------'
*/
/**
* PHPMailer - PHP SMTP email transport class
* NOTE: Designed for use with PHP version 5 and up
* @package PHPMailer
* @author Andy Prevost
* @author Marcus Bointon
* @copyright 2004 - 2008 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html Distributed under the Lesser General Public License (LGPL)
* @version $Id$
*/
/**
* SMTP is rfc 821 compliant and implements all the rfc 821 SMTP
* commands except TURN which will always return a not implemented
* error. SMTP also provides some utility methods for sending mail
* to an SMTP server.
* original author: Chris Ryan
*/
class SMTP {
/**
* SMTP server port
* @var int
*/
public $SMTP_PORT = 25;
/**
* SMTP reply line ending
* @var string
*/
public $CRLF = "\r\n";
/**
* Sets whether debugging is turned on
* @var bool
*/
public $do_debug; // the level of debug to perform
/**
* Sets VERP use on/off (default is off)
* @var bool
*/
public $do_verp = false;
/////////////////////////////////////////////////
// PROPERTIES, PRIVATE AND PROTECTED
/////////////////////////////////////////////////
private $smtp_conn; // the socket to the server
private $error; // error if any on the last call
private $helo_rply; // the reply the server sent to us for HELO
/**
* Initialize the class so that the data is in a known state.
* @access public
* @return void
*/
public function __construct() {
$this->smtp_conn = 0;
$this->error = null;
$this->helo_rply = null;
$this->do_debug = 0;
}
/////////////////////////////////////////////////
// CONNECTION FUNCTIONS
/////////////////////////////////////////////////
/**
* Connect to the server specified on the port specified.
* If the port is not specified use the default SMTP_PORT.
* If tval is specified then a connection will try and be
* established with the server for that number of seconds.
* If tval is not specified the default is 30 seconds to
* try on the connection.
*
* SMTP CODE SUCCESS: 220
* SMTP CODE FAILURE: 421
* @access public
* @return bool
*/
public function Connect($host, $port = 0, $tval = 30) {
// set the error val to null so there is no confusion
$this->error = null;
// make sure we are __not__ connected
if($this->connected()) {
// already connected, generate error
$this->error = array("error" => "Already connected to a server");
return false;
}
if(empty($port)) {
$port = $this->SMTP_PORT;
}
// connect to the smtp server
$this->smtp_conn = @fsockopen($host, // the host of the server
$port, // the port to use
$errno, // error number if any
$errstr, // error message if any
$tval); // give up after ? secs
// verify we connected properly
if(empty($this->smtp_conn)) {
$this->error = array("error" => "Failed to connect to server",
"errno" => $errno,
"errstr" => $errstr);
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->"."SMTP -> ERROR: " . $this->error["error"] . ": $errstr ($errno)" . $this->CRLF);
}
return false;
}
// SMTP server can take longer to respond, give longer timeout for first read
// Windows does not have support for this timeout function
if(substr(PHP_OS, 0, 3) != "WIN")
socket_set_timeout($this->smtp_conn, $tval, 0);
// get any announcement
$announce = $this->get_lines();
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $announce . $this->CRLF );
}
return true;
}
/**
* Initiate a TLS communication with the server.
*
* SMTP CODE 220 Ready to start TLS
* SMTP CODE 501 Syntax error (no parameters allowed)
* SMTP CODE 454 TLS not available due to temporary reason
* @access public
* @return bool success
*/
public function StartTLS() {
$this->error = null; # to avoid confusion
if(!$this->connected()) {
$this->error = array("error" => "Called StartTLS() without being connected");
return false;
}
fputs($this->smtp_conn,"STARTTLS" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 220) {
$this->error =
array("error" => "STARTTLS not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
// Begin encrypted connection
if(!stream_socket_enable_crypto($this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT)) {
// try a different method, as sometimes you must first switch to blocking mode, if you have problems with timeouts
stream_set_blocking($this->smtp_conn, true);
$retval = stream_socket_enable_crypto($this_smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);
stream_set_blocking ($this->smtp_conn, false);
if (!$retval) return false;
}
return true;
}
/**
* Performs SMTP authentication. Must be run after running the
* Hello() method. Returns true if successfully authenticated.
* @access public
* @return bool
*/
public function Authenticate($username, $password) {
// Start authentication
fputs($this->smtp_conn,"AUTH LOGIN" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 334) {
$this->error =
array("error" => "AUTH not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
// Send encoded username
fputs($this->smtp_conn, base64_encode($username) . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 334) {
$this->error =
array("error" => "Username not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
// Send encoded password
fputs($this->smtp_conn, base64_encode($password) . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($code != 235) {
$this->error =
array("error" => "Password not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* Returns true if connected to a server otherwise false
* @access public
* @return bool
*/
public function Connected() {
if(!empty($this->smtp_conn)) {
$sock_status = socket_get_status($this->smtp_conn);
if($sock_status["eof"]) {
// the socket is valid but we are not connected
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> NOTICE:" . $this->CRLF . "EOF caught while checking if connected");
}
$this->Close();
return false;
}
return true; // everything looks good
}
return false;
}
/**
* Closes the socket and cleans up the state of the class.
* It is not considered good to use this function without
* first trying to use QUIT.
* @access public
* @return void
*/
public function Close() {
$this->error = null; // so there is no confusion
$this->helo_rply = null;
if(!empty($this->smtp_conn)) {
// close the connection and cleanup
fclose($this->smtp_conn);
$this->smtp_conn = 0;
}
}
/////////////////////////////////////////////////
// SMTP COMMANDS
/////////////////////////////////////////////////
/**
* Issues a data command and sends the msg_data to the server
* finializing the mail transaction. $msg_data is the message
* that is to be send with the headers. Each header needs to be
* on a single line followed by a <CRLF> with the message headers
* and the message body being seperated by and additional <CRLF>.
*
* Implements rfc 821: DATA <CRLF>
*
* SMTP CODE INTERMEDIATE: 354
* [data]
* <CRLF>.<CRLF>
* SMTP CODE SUCCESS: 250
* SMTP CODE FAILURE: 552,554,451,452
* SMTP CODE FAILURE: 451,554
* SMTP CODE ERROR : 500,501,503,421
* @access public
* @return bool
*/
public function Data($msg_data) {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Data() without being connected");
return false;
}
fputs($this->smtp_conn,"DATA" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 354 && $code != 250) {
$this->error =
array("error" => "DATA command not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
/* the server is ready to accept data!
* according to rfc 821 we should not send more than 1000
* including the CRLF
* characters on a single line so we will break the data up
* into lines by \r and/or \n then if needed we will break
* each of those into smaller lines to fit within the limit.
* in addition we will be looking for lines that start with
* a period '.' and append and additional period '.' to that
* line. NOTE: this does not count towards limit.
*/
// normalize the line breaks so we know the explode works
$msg_data = str_replace("\r\n","\n",$msg_data);
$msg_data = str_replace("\r","\n",$msg_data);
$lines = explode("\n",$msg_data);
/* we need to find a good way to determine is headers are
* in the msg_data or if it is a straight msg body
* currently I am assuming rfc 822 definitions of msg headers
* and if the first field of the first line (':' sperated)
* does not contain a space then it _should_ be a header
* and we can process all lines before a blank "" line as
* headers.
*/
$field = substr($lines[0],0,strpos($lines[0],":"));
$in_headers = false;
if(!empty($field) && strpos($field," ")===false) {
$in_headers = true;
}
$max_line_length = 998; // used below; set here for ease in change
while(list(,$line) = @each($lines)) {
$lines_out = null;
if($line == "" && $in_headers) {
$in_headers = false;
}
// ok we need to break this line up into several smaller lines
while(strlen($line) > $max_line_length) {
$pos = strrpos(substr($line,0,$max_line_length)," ");
// Patch to fix DOS attack
if(!$pos) {
$pos = $max_line_length - 1;
$lines_out[] = substr($line,0,$pos);
$line = substr($line,$pos);
} else {
$lines_out[] = substr($line,0,$pos);
$line = substr($line,$pos + 1);
}
/* if processing headers add a LWSP-char to the front of new line
* rfc 822 on long msg headers
*/
if($in_headers) {
$line = "\t" . $line;
}
}
$lines_out[] = $line;
// send the lines to the server
while(list(,$line_out) = @each($lines_out)) {
if(strlen($line_out) > 0)
{
if(substr($line_out, 0, 1) == ".") {
$line_out = "." . $line_out;
}
}
fputs($this->smtp_conn,$line_out . $this->CRLF);
}
}
// message data has been sent
fputs($this->smtp_conn, $this->CRLF . "." . $this->CRLF);
$rply = $this->get_lines();
# if the server is slow try to get an answer within 30 seconds
$timeout_counter = 0;
while(($rply=="") && ($timeout_counter<30))
{
$timeout_counter+=1;
sleep(1);
$rply = $this->get_lines();
}
# still no response to our data -> fail!
if($rply=="")
{
$this->error = array("error" => "timeout from server after data sent.",
"smtp_code" => 0,
"smtp_msg" => "(nothing)");
if($this->do_debug >= 1) {
error_log(__METHOD__."->". "SMTP -> ERROR: " . $this->error["error"] .
": " . $rply . $this->CRLF);
}
return false;
}
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 250) {
$this->error =
array("error" => "DATA not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* Sends the HELO command to the smtp server.
* This makes sure that we and the server are in
* the same known state.
*
* Implements from rfc 821: HELO <SP> <domain> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE ERROR : 500, 501, 504, 421
* @access public
* @return bool
*/
public function Hello($host = '') {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Hello() without being connected");
return false;
}
// if hostname for HELO was not specified send default
if(empty($host)) {
// determine appropriate default to send to server
$host = "localhost";
}
// Send extended hello first (RFC 2821)
if(!$this->SendHello("EHLO", $host)) {
if(!$this->SendHello("HELO", $host)) {
return false;
}
}
return true;
}
/**
* Sends a HELO/EHLO command.
* @access private
* @return bool
*/
private function SendHello($hello, $host) {
fputs($this->smtp_conn, $hello . " " . $host . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER: " . $rply . $this->CRLF );
}
if($code != 250) {
$this->error =
array("error" => $hello . " not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
$this->helo_rply = $rply;
return true;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command.
*
* Implements rfc 821: MAIL <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,421
* @access public
* @return bool
*/
public function Mail($from) {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Mail() without being connected");
return false;
}
$useVerp = ($this->do_verp ? "XVERP" : "");
fputs($this->smtp_conn,"MAIL FROM:<" . $from . ">" . $useVerp . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 250) {
$this->error =
array("error" => "MAIL not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* Sends the quit command to the server and then closes the socket
* if there is no error or the $close_on_error argument is true.
*
* Implements from rfc 821: QUIT <CRLF>
*
* SMTP CODE SUCCESS: 221
* SMTP CODE ERROR : 500
* @access public
* @return bool
*/
public function Quit($close_on_error = true) {
$this->error = null; // so there is no confusion
if(!$this->connected()) {
$this->error = array(
"error" => "Called Quit() without being connected");
return false;
}
// send the quit command to the server
fputs($this->smtp_conn,"QUIT" . $this->CRLF);
// get any good-bye messages
$byemsg = $this->get_lines();
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $byemsg . $this->CRLF );
}
$rval = true;
$e = null;
$code = substr($byemsg,0,3);
if($code != 221) {
// use e as a tmp var cause Close will overwrite $this->error
$e = array("error" => "SMTP server rejected quit command",
"smtp_code" => $code,
"smtp_rply" => substr($byemsg,4));
$rval = false;
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $e["error"] . ": " . $byemsg . $this->CRLF );
}
}
if(empty($e) || $close_on_error) {
$this->Close();
}
return $rval;
}
/**
* Sends the command RCPT to the SMTP server with the TO: argument of $to.
* Returns true if the recipient was accepted false if it was rejected.
*
* Implements from rfc 821: RCPT <SP> TO:<forward-path> <CRLF>
*
* SMTP CODE SUCCESS: 250,251
* SMTP CODE FAILURE: 550,551,552,553,450,451,452
* SMTP CODE ERROR : 500,501,503,421
* @access public
* @return bool
*/
public function Recipient($to) {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Recipient() without being connected");
return false;
}
fputs($this->smtp_conn,"RCPT TO:<" . $to . ">" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 250 && $code != 251) {
$this->error =
array("error" => "RCPT not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* Sends the RSET command to abort and transaction that is
* currently in progress. Returns true if successful false
* otherwise.
*
* Implements rfc 821: RSET <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE ERROR : 500,501,504,421
* @access public
* @return bool
*/
public function Reset() {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called Reset() without being connected");
return false;
}
fputs($this->smtp_conn,"RSET" . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 250) {
$this->error =
array("error" => "RSET failed",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* Starts a mail transaction from the email address specified in
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more Recipient
* commands may be called followed by a Data command. This command
* will send the message to the users terminal if they are logged
* in and send them an email.
*
* Implements rfc 821: SAML <SP> FROM:<reverse-path> <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE SUCCESS: 552,451,452
* SMTP CODE SUCCESS: 500,501,502,421
* @access public
* @return bool
*/
public function SendAndMail($from) {
$this->error = null; // so no confusion is caused
if(!$this->connected()) {
$this->error = array(
"error" => "Called SendAndMail() without being connected");
return false;
}
fputs($this->smtp_conn,"SAML FROM:" . $from . $this->CRLF);
$rply = $this->get_lines();
$code = substr($rply,0,3);
if($this->do_debug >= 2) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> FROM SERVER:" . $rply . $this->CRLF );
}
if($code != 250) {
$this->error =
array("error" => "SAML not accepted from server",
"smtp_code" => $code,
"smtp_msg" => substr($rply,4));
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> ERROR: " . $this->error["error"] . ": " . $rply . $this->CRLF );
}
return false;
}
return true;
}
/**
* This is an optional command for SMTP that this class does not
* support. This method is here to make the RFC821 Definition
* complete for this class and __may__ be implimented in the future
*
* Implements from rfc 821: TURN <CRLF>
*
* SMTP CODE SUCCESS: 250
* SMTP CODE FAILURE: 502
* SMTP CODE ERROR : 500, 503
* @access public
* @return bool
*/
public function Turn() {
$this->error = array("error" => "This method, TURN, of the SMTP ".
"is not implemented");
if($this->do_debug >= 1) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> NOTICE: " . $this->error["error"] . $this->CRLF );
}
return false;
}
/**
* Get the current error
* @access public
* @return array
*/
public function getError() {
return $this->error;
}
/////////////////////////////////////////////////
// INTERNAL FUNCTIONS
/////////////////////////////////////////////////
/**
* Read in as many lines as possible
* either before eof or socket timeout occurs on the operation.
* With SMTP we can tell if we have more lines to read if the
* 4th character is '-' symbol. If it is a space then we don't
* need to read anything else.
* @access private
* @return string
*/
private function get_lines() {
$data = "";
while($str = @fgets($this->smtp_conn,515)) {
if($this->do_debug >= 4) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> get_lines(): \$data was \"$data\"" . $this->CRLF );
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> get_lines(): \$str is \"$str\"" . $this->CRLF );
}
$data .= $str;
if($this->do_debug >= 4) {
error_log(__METHOD__.' Line:'.__LINE__."->". "SMTP -> get_lines(): \$data is \"$data\"" . $this->CRLF );
}
// if 4th character is a space, we are done reading, break the loop
if(substr($str,3,1) == " ") { break; }
}
return $data;
}
}
?>

View File

@ -150,12 +150,8 @@ if (!function_exists('imap_rfc822_write_address'))
*/
function imap_rfc822_write_address($mailbox, $host, $personal)
{
if (is_array($personal)) {
foreach ($personal as $e) {
$p .= ($p?' ':'').$e;
}
$personal = $p;
}
if (is_array($personal)) $personal = implode(' ', $personal);
//if (!preg_match('/^[!#$%&\'*+/0-9=?A-Z^_`a-z{|}~-]+$/u', $personal)) // that's how I read the rfc(2)822
if ($personal && !preg_match('/^[0-9A-Z -]*$/iu', $personal)) // but quoting is never wrong, so quote more then necessary
{

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Arabic Version, UTF-8
* by : bahjat al mostafa <bahjat983@hotmail.com>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Error: لم نستطع تأكيد الهوية.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Error: لم نستطع الاتصال بمخدم SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: لم يتم قبول المعلومات .';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'ترميز غير معروف: ';
$PHPMAILER_LANG['execute'] = 'لم أستطع تنفيذ : ';
$PHPMAILER_LANG['file_access'] = 'لم نستطع الوصول للملف: ';
$PHPMAILER_LANG['file_open'] = 'File Error: لم نستطع فتح الملف: ';
$PHPMAILER_LANG['from_failed'] = 'البريد التالي لم نستطع ارسال البريد له : ';
$PHPMAILER_LANG['instantiate'] = 'لم نستطع توفير خدمة البريد.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer غير مدعوم.';
//$PHPMAILER_LANG['provide_address'] = 'You must provide at least one recipient email address.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: الأخطاء التالية ' .
'فشل في الارسال لكل من : ';
$PHPMAILER_LANG['signing'] = 'خطأ في التوقيع: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Portuguese Version
* By Paulo Henrique Garcia - paulo@controllerweb.com.br
*/
$PHPMAILER_LANG['authenticate'] = 'Erro de SMTP: Não foi possível autenticar.';
$PHPMAILER_LANG['connect_host'] = 'Erro de SMTP: Não foi possível conectar com o servidor SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Erro de SMTP: Dados não aceitos.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Codificação desconhecida: ';
$PHPMAILER_LANG['execute'] = 'Não foi possível executar: ';
$PHPMAILER_LANG['file_access'] = 'Não foi possível acessar o arquivo: ';
$PHPMAILER_LANG['file_open'] = 'Erro de Arquivo: Não foi possível abrir o arquivo: ';
$PHPMAILER_LANG['from_failed'] = 'Os endereços de rementente a seguir falharam: ';
$PHPMAILER_LANG['instantiate'] = 'Não foi possível instanciar a função mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer não suportado.';
$PHPMAILER_LANG['provide_address'] = 'Você deve fornecer pelo menos um endereço de destinatário de email.';
$PHPMAILER_LANG['recipients_failed'] = 'Erro de SMTP: Os endereços de destinatário a seguir falharam: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Catalan Version
* By Ivan: web AT microstudi DOT com
*/
$PHPMAILER_LANG['authenticate'] = 'Error SMTP: No s\'hapogut autenticar.';
$PHPMAILER_LANG['connect_host'] = 'Error SMTP: No es pot connectar al servidor SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Dades no acceptades.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Codificació desconeguda: ';
$PHPMAILER_LANG['execute'] = 'No es pot executar: ';
$PHPMAILER_LANG['file_access'] = 'No es pot accedir a l\'arxiu: ';
$PHPMAILER_LANG['file_open'] = 'Error d\'Arxiu: No es pot obrir l\'arxiu: ';
$PHPMAILER_LANG['from_failed'] = 'La(s) següent(s) adreces de remitent han fallat: ';
$PHPMAILER_LANG['instantiate'] = 'No s\'ha pogut crear una instància de la funció Mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no està suportat';
$PHPMAILER_LANG['provide_address'] = 'S\'ha de proveir almenys una adreça d\'email com a destinatari.';
$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Els següents destinataris han fallat: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Chinese Version
* By LiuXin: www.80x86.cn/blog/
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:身份验证失败。';
$PHPMAILER_LANG['connect_host'] = 'SMTP 错误: 不能连接SMTP主机。';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误: 数据不可接受。';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = '未知编码:';
$PHPMAILER_LANG['execute'] = '不能执行: ';
$PHPMAILER_LANG['file_access'] = '不能访问文件:';
$PHPMAILER_LANG['file_open'] = '文件错误:不能打开文件:';
$PHPMAILER_LANG['from_failed'] = '下面的发送地址邮件发送失败了: ';
$PHPMAILER_LANG['instantiate'] = '不能实现mail方法。';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' 您所选择的发送邮件的方法并不支持。';
$PHPMAILER_LANG['provide_address'] = '您必须提供至少一个 收信人的email地址。';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误: 下面的 收件人失败了: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Czech Version
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Chyba autentikace.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Nelze navázat spojení se SMTP serverem.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Data nebyla pøijata';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Neznámé kódování: ';
$PHPMAILER_LANG['execute'] = 'Nelze provést: ';
$PHPMAILER_LANG['file_access'] = 'Soubor nenalezen: ';
$PHPMAILER_LANG['file_open'] = 'File Error: Nelze otevøít soubor pro ètení: ';
$PHPMAILER_LANG['from_failed'] = 'Následující adresa From je nesprávná: ';
$PHPMAILER_LANG['instantiate'] = 'Nelze vytvoøit instanci emailové funkce.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailový klient není podporován.';
$PHPMAILER_LANG['provide_address'] = 'Musíte zadat alespoò jednu emailovou adresu pøíjemce.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: Adresy pøíjemcù nejsou správné ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* German Version
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Fehler: Authentifizierung fehlgeschlagen.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Fehler: Konnte keine Verbindung zum SMTP-Host herstellen.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Fehler: Daten werden nicht akzeptiert.';
$PHPMAILER_LANG['empty_message'] = 'E-Mail Inhalt ist leer.';
$PHPMAILER_LANG['encoding'] = 'Unbekanntes Encoding-Format: ';
$PHPMAILER_LANG['execute'] = 'Konnte folgenden Befehl nicht ausführen: ';
$PHPMAILER_LANG['file_access'] = 'Zugriff auf folgende Datei fehlgeschlagen: ';
$PHPMAILER_LANG['file_open'] = 'Datei Fehler: konnte folgende Datei nicht öffnen: ';
$PHPMAILER_LANG['from_failed'] = 'Die folgende Absenderadresse ist nicht korrekt: ';
$PHPMAILER_LANG['instantiate'] = 'Mail Funktion konnte nicht initialisiert werden.';
$PHPMAILER_LANG['invalid_email'] = 'E-Mail wird nicht gesendet, die Adresse ist ungültig.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wird nicht unterstützt.';
$PHPMAILER_LANG['provide_address'] = 'Bitte geben Sie mindestens eine Empfänger E-Mailadresse an.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Fehler: Die folgenden Empfänger sind nicht korrekt: ';
$PHPMAILER_LANG['signing'] = 'Fehler beim Signieren: ';
$PHPMAILER_LANG['smtp_connect_failed'] = 'Verbindung zu SMTP Server fehlgeschlagen.';
$PHPMAILER_LANG['smtp_error'] = 'Fehler vom SMTP Server: ';
$PHPMAILER_LANG['variable_set'] = 'Kann Variable nicht setzen oder zurücksetzen: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Danish Version
* Author: Mikael Stokkebro <info@stokkebro.dk>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP fejl: Kunne ikke logge på.';
$PHPMAILER_LANG['connect_host'] = 'SMTP fejl: Kunne ikke tilslutte SMTP serveren.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fejl: Data kunne ikke accepteres.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Ukendt encode-format: ';
$PHPMAILER_LANG['execute'] = 'Kunne ikke køre: ';
$PHPMAILER_LANG['file_access'] = 'Ingen adgang til fil: ';
$PHPMAILER_LANG['file_open'] = 'Fil fejl: Kunne ikke åbne filen: ';
$PHPMAILER_LANG['from_failed'] = 'Følgende afsenderadresse er forkert: ';
$PHPMAILER_LANG['instantiate'] = 'Kunne ikke initialisere email funktionen.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer understøttes ikke.';
$PHPMAILER_LANG['provide_address'] = 'Du skal indtaste mindst en modtagers emailadresse.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fejl: Følgende modtagere er forkerte: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Spanish version
* Versión en español
*/
$PHPMAILER_LANG['authenticate'] = 'Error SMTP: No se pudo autentificar.';
$PHPMAILER_LANG['connect_host'] = 'Error SMTP: No puedo conectar al servidor SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Error SMTP: Datos no aceptados.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Codificación desconocida: ';
$PHPMAILER_LANG['execute'] = 'No puedo ejecutar: ';
$PHPMAILER_LANG['file_access'] = 'No puedo acceder al archivo: ';
$PHPMAILER_LANG['file_open'] = 'Error de Archivo: No puede abrir el archivo: ';
$PHPMAILER_LANG['from_failed'] = 'La(s) siguiente(s) direcciones de remitente fallaron: ';
$PHPMAILER_LANG['instantiate'] = 'No pude crear una instancia de la función Mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer no está soportado.';
$PHPMAILER_LANG['provide_address'] = 'Debe proveer al menos una dirección de email como destinatario.';
$PHPMAILER_LANG['recipients_failed'] = 'Error SMTP: Los siguientes destinatarios fallaron: ';
$PHPMAILER_LANG['signing'] = 'Error al firmar: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Estonian Version
* By Indrek Päri
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Viga: Autoriseerimise viga.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Viga: Ei õnnestunud luua ühendust SMTP serveriga.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Viga: Vigased andmed.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Tundmatu Unknown kodeering: ';
$PHPMAILER_LANG['execute'] = 'Tegevus ebaõnnestus: ';
$PHPMAILER_LANG['file_access'] = 'Pole piisavalt õiguseid järgneva faili avamiseks: ';
$PHPMAILER_LANG['file_open'] = 'Faili Viga: Faili avamine ebaõnnestus: ';
$PHPMAILER_LANG['from_failed'] = 'Järgnev saatja e-posti aadress on vigane: ';
$PHPMAILER_LANG['instantiate'] = 'mail funktiooni käivitamine ebaõnnestus.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Te peate määrama vähemalt ühe saaja e-posti aadressi.';
$PHPMAILER_LANG['mailer_not_supported'] = ' maileri tugi puudub.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Viga: Järgnevate saajate e-posti aadressid on vigased: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Finnish Version
* By Jyry Kuukanen
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP-virhe: käyttäjätunnistus epäonnistui.';
$PHPMAILER_LANG['connect_host'] = 'SMTP-virhe: yhteys palvelimeen ei onnistu.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP-virhe: data on virheellinen.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: ';
$PHPMAILER_LANG['execute'] = 'Suoritus epäonnistui: ';
$PHPMAILER_LANG['file_access'] = 'Seuraavaan tiedostoon ei ole oikeuksia: ';
$PHPMAILER_LANG['file_open'] = 'Tiedostovirhe: Ei voida avata tiedostoa: ';
$PHPMAILER_LANG['from_failed'] = 'Seuraava lähettäjän osoite on virheellinen: ';
$PHPMAILER_LANG['instantiate'] = 'mail-funktion luonti epäonnistui.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = 'postivälitintyyppiä ei tueta.';
$PHPMAILER_LANG['provide_address'] = 'Aseta vähintään yksi vastaanottajan sähk&ouml;postiosoite.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP-virhe: seuraava vastaanottaja osoite on virheellinen.';
$PHPMAILER_LANG['encoding'] = 'Tuntematon koodaustyyppi: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Faroese Version [language of the Faroe Islands, a Danish dominion]
* This file created: 11-06-2004
* Supplied by Dávur Sørensen [www.profo-webdesign.dk]
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP feilur: Kundi ikki góðkenna.';
$PHPMAILER_LANG['connect_host'] = 'SMTP feilur: Kundi ikki knýta samband við SMTP vert.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP feilur: Data ikki góðkent.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Ókend encoding: ';
$PHPMAILER_LANG['execute'] = 'Kundi ikki útføra: ';
$PHPMAILER_LANG['file_access'] = 'Kundi ikki tilganga fílu: ';
$PHPMAILER_LANG['file_open'] = 'Fílu feilur: Kundi ikki opna fílu: ';
$PHPMAILER_LANG['from_failed'] = 'fylgjandi Frá/From adressa miseydnaðist: ';
$PHPMAILER_LANG['instantiate'] = 'Kuni ikki instantiera mail funktión.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' er ikki supporterað.';
$PHPMAILER_LANG['provide_address'] = 'Tú skal uppgeva minst móttakara-emailadressu(r).';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feilur: Fylgjandi móttakarar miseydnaðust: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* French Version
*/
$PHPMAILER_LANG['authenticate'] = 'Erreur SMTP : Echec de l\'authentification.';
$PHPMAILER_LANG['connect_host'] = 'Erreur SMTP : Impossible de se connecter au serveur SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Erreur SMTP : Données incorrects.';
$PHPMAILER_LANG['empty_message'] = 'Corps de message vide';
$PHPMAILER_LANG['encoding'] = 'Encodage inconnu : ';
$PHPMAILER_LANG['execute'] = 'Impossible de lancer l\'exécution : ';
$PHPMAILER_LANG['file_access'] = 'Impossible d\'accéder au fichier : ';
$PHPMAILER_LANG['file_open'] = 'Erreur Fichier : ouverture impossible : ';
$PHPMAILER_LANG['from_failed'] = 'L\'adresse d\'expéditeur suivante a échouée : ';
$PHPMAILER_LANG['instantiate'] = 'Impossible d\'instancier la fonction mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' client de messagerie non supporté.';
$PHPMAILER_LANG['provide_address'] = 'Vous devez fournir au moins une adresse de destinataire.';
$PHPMAILER_LANG['recipients_failed'] = 'Erreur SMTP : Les destinataires suivants sont en erreur : ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Hungarian Version
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Hiba: Sikertelen autentikáció.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Hiba: Nem tudtam csatlakozni az SMTP host-hoz.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Hiba: Nem elfogadható adat.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Ismeretlen kódolás: ';
$PHPMAILER_LANG['execute'] = 'Nem tudtam végrehajtani: ';
$PHPMAILER_LANG['file_access'] = 'Nem sikerült elérni a következõ fájlt: ';
$PHPMAILER_LANG['file_open'] = 'Fájl Hiba: Nem sikerült megnyitni a következõ fájlt: ';
$PHPMAILER_LANG['from_failed'] = 'Az alábbi Feladó cím hibás: ';
$PHPMAILER_LANG['instantiate'] = 'Nem sikerült példányosítani a mail funkciót.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Meg kell adnod legalább egy címzett email címet.';
$PHPMAILER_LANG['mailer_not_supported'] = ' levelezõ nem támogatott.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Hiba: Az alábbi címzettek hibásak: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Italian version
* @package PHPMailer
* @author Ilias Bartolini <brain79@inwind.it>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Error: Impossibile autenticarsi.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Error: Impossibile connettersi all\'host SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Error: Data non accettati dal server.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Encoding set dei caratteri sconosciuto: ';
$PHPMAILER_LANG['execute'] = 'Impossibile eseguire l\'operazione: ';
$PHPMAILER_LANG['file_access'] = 'Impossibile accedere al file: ';
$PHPMAILER_LANG['file_open'] = 'File Error: Impossibile aprire il file: ';
$PHPMAILER_LANG['from_failed'] = 'I seguenti indirizzi mittenti hanno generato errore: ';
$PHPMAILER_LANG['instantiate'] = 'Impossibile istanziare la funzione mail';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Deve essere fornito almeno un indirizzo ricevente';
$PHPMAILER_LANG['mailer_not_supported'] = 'Mailer non supportato';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Error: I seguenti indirizzi destinatari hanno generato errore: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Japanese Version
* By Mitsuhiro Yoshida - http://mitstek.com/
*/
$PHPMAILER_LANG['authenticate'] = 'SMTPエラー: 認証できませんでした。';
$PHPMAILER_LANG['connect_host'] = 'SMTPエラー: SMTPホストに接続できませんでした。';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTPエラー: データが受け付けられませんでした。';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = '不明なエンコーディング: ';
$PHPMAILER_LANG['execute'] = '実行できませんでした: ';
$PHPMAILER_LANG['file_access'] = 'ファイルにアクセスできません: ';
$PHPMAILER_LANG['file_open'] = 'ファイルエラー: ファイルを開けません: ';
$PHPMAILER_LANG['from_failed'] = '次のFromアドレスに間違いがあります: ';
$PHPMAILER_LANG['instantiate'] = 'メール関数が正常に動作しませんでした。';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = '少なくとも1つメールアドレスを 指定する必要があります。';
$PHPMAILER_LANG['mailer_not_supported'] = ' メーラーがサポートされていません。';
$PHPMAILER_LANG['recipients_failed'] = 'SMTPエラー: 次の受信者アドレスに 間違いがあります: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Dutch Version
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Fout: authenticatie mislukt.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Fout: Kon niet verbinden met SMTP host.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Fout: Data niet geaccepteerd.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Onbekende codering: ';
$PHPMAILER_LANG['execute'] = 'Kon niet uitvoeren: ';
$PHPMAILER_LANG['file_access'] = 'Kreeg geen toegang tot bestand: ';
$PHPMAILER_LANG['file_open'] = 'Bestandsfout: Kon bestand niet openen: ';
$PHPMAILER_LANG['from_failed'] = 'De volgende afzender adressen zijn mislukt: ';
$PHPMAILER_LANG['instantiate'] = 'Kon mail functie niet initialiseren.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Er moet tenmiste één ontvanger emailadres opgegeven worden.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer wordt niet ondersteund.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Fout: De volgende ontvangers zijn mislukt: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Norwegian Version
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Feil: Kunne ikke authentisere.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Feil: Kunne ikke koble til SMTP host.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Feil: Data ble ikke akseptert.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Ukjent encoding: ';
$PHPMAILER_LANG['execute'] = 'Kunne ikke utføre: ';
$PHPMAILER_LANG['file_access'] = 'Kunne ikke få tilgang til filen: ';
$PHPMAILER_LANG['file_open'] = 'Fil feil: Kunne ikke åpne filen: ';
$PHPMAILER_LANG['from_failed'] = 'Følgende Fra feilet: ';
$PHPMAILER_LANG['instantiate'] = 'Kunne ikke instantiate mail funksjonen.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Du må ha med minst en mottager adresse.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer er ikke supportert.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Feil: Følgende mottagere feilet: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Polish Version
*/
$PHPMAILER_LANG['authenticate'] = 'Błąd SMTP: Nie można przeprowadzić autentykacji.';
$PHPMAILER_LANG['connect_host'] = 'Błąd SMTP: Nie można połączyć się z wybranym hostem.';
$PHPMAILER_LANG['data_not_accepted'] = 'Błąd SMTP: Dane nie zostały przyjęte.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Nieznany sposób kodowania znaków: ';
$PHPMAILER_LANG['execute'] = 'Nie można uruchomić: ';
$PHPMAILER_LANG['file_access'] = 'Brak dostępu do pliku: ';
$PHPMAILER_LANG['file_open'] = 'Nie można otworzyć pliku: ';
$PHPMAILER_LANG['from_failed'] = 'Następujący adres Nadawcy jest jest nieprawidłowy: ';
$PHPMAILER_LANG['instantiate'] = 'Nie można wywołać funkcji mail(). Sprawdź konfigurację serwera.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Należy podać prawidłowy adres email Odbiorcy.';
$PHPMAILER_LANG['mailer_not_supported'] = 'Wybrana metoda wysyłki wiadomości nie jest obsługiwana.';
$PHPMAILER_LANG['recipients_failed'] = 'Błąd SMTP: Następujący odbiorcy są nieprawidłowi: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Romanian Version
* @package PHPMailer
* @author Catalin Constantin <catalin@dazoot.ro>
*/
$PHPMAILER_LANG['authenticate'] = 'Eroare SMTP: Nu a functionat autentificarea.';
$PHPMAILER_LANG['connect_host'] = 'Eroare SMTP: Nu m-am putut conecta la adresa SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Eroare SMTP: Continutul mailului nu a fost acceptat.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Encodare necunoscuta: ';
$PHPMAILER_LANG['execute'] = 'Nu pot executa: ';
$PHPMAILER_LANG['file_access'] = 'Nu pot accesa fisierul: ';
$PHPMAILER_LANG['file_open'] = 'Eroare de fisier: Nu pot deschide fisierul: ';
$PHPMAILER_LANG['from_failed'] = 'Urmatoarele adrese From au dat eroare: ';
$PHPMAILER_LANG['instantiate'] = 'Nu am putut instantia functia mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer nu este suportat.';
$PHPMAILER_LANG['provide_address'] = 'Trebuie sa adaugati cel putin un recipient (adresa de mail).';
$PHPMAILER_LANG['recipients_failed'] = 'Eroare SMTP: Urmatoarele adrese de mail au dat eroare: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,25 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Russian Version by Alexey Chumakov <alex@chumakov.ru>
*/
$PHPMAILER_LANG['authenticate'] = 'Ошибка SMTP: ошибка авторизации.';
$PHPMAILER_LANG['connect_host'] = 'Ошибка SMTP: не удается подключиться к серверу SMTP.';
$PHPMAILER_LANG['data_not_accepted'] = 'Ошибка SMTP: данные не приняты.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Неизвестный вид кодировки: ';
$PHPMAILER_LANG['execute'] = 'Невозможно выполнить команду: ';
$PHPMAILER_LANG['file_access'] = 'Нет доступа к файлу: ';
$PHPMAILER_LANG['file_open'] = 'Файловая ошибка: не удается открыть файл: ';
$PHPMAILER_LANG['from_failed'] = 'Неверный адрес отправителя: ';
$PHPMAILER_LANG['instantiate'] = 'Невозможно запустить функцию mail.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Пожалуйста, введите хотя бы один адрес e-mail получателя.';
$PHPMAILER_LANG['mailer_not_supported'] = ' - почтовый сервер не поддерживается.';
$PHPMAILER_LANG['recipients_failed'] = 'Ошибка SMTP: отправка по следующим адресам получателей не удалась: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Swedish Version
* Author: Johan Linnér <johan@linner.biz>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP fel: Kunde inte autentisera.';
$PHPMAILER_LANG['connect_host'] = 'SMTP fel: Kunde inte ansluta till SMTP-server.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP fel: Data accepterades inte.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Okänt encode-format: ';
$PHPMAILER_LANG['execute'] = 'Kunde inte köra: ';
$PHPMAILER_LANG['file_access'] = 'Ingen åtkomst till fil: ';
$PHPMAILER_LANG['file_open'] = 'Fil fel: Kunde inte öppna fil: ';
$PHPMAILER_LANG['from_failed'] = 'Följande avsändaradress är felaktig: ';
$PHPMAILER_LANG['instantiate'] = 'Kunde inte initiera e-postfunktion.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'Du måste ange minst en mottagares e-postadress.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailer stöds inte.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP fel: Följande mottagare är felaktig: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,27 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Turkish version
* Türkçe Versiyonu
* ÝZYAZILIM - Elçin Özel - Can Yýlmaz - Mehmet Benlioðlu
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP Hatasý: Doðrulanamýyor.';
$PHPMAILER_LANG['connect_host'] = 'SMTP Hatasý: SMTP hosta baðlanýlamýyor.';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP Hatasý: Veri kabul edilmedi.';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = 'Bilinmeyen þifreleme: ';
$PHPMAILER_LANG['execute'] = 'Çalýþtýrýlamýyor: ';
$PHPMAILER_LANG['file_access'] = 'Dosyaya eriþilemiyor: ';
$PHPMAILER_LANG['file_open'] = 'Dosya Hatasý: Dosya açýlamýyor: ';
$PHPMAILER_LANG['from_failed'] = 'Baþarýsýz olan gönderici adresi: ';
$PHPMAILER_LANG['instantiate'] = 'Örnek mail fonksiyonu yaratýlamadý.';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = 'En az bir tane mail adresi belirtmek zorundasýnýz alýcýnýn email adresi.';
$PHPMAILER_LANG['mailer_not_supported'] = ' mailler desteklenmemektedir.';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP Hatasý: alýcýlara ulaþmadý: ';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Traditional Chinese Version
* @author liqwei <liqwei@liqwei.com>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP 錯誤:登錄失敗。';
$PHPMAILER_LANG['connect_host'] = 'SMTP 錯誤:無法連接到 SMTP 主機。';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 錯誤:數據不被接受。';
//$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = '未知編碼: ';
$PHPMAILER_LANG['file_access'] = '無法訪問文件:';
$PHPMAILER_LANG['file_open'] = '文件錯誤:無法打開文件:';
$PHPMAILER_LANG['from_failed'] = '發送地址錯誤:';
$PHPMAILER_LANG['execute'] = '無法執行:';
$PHPMAILER_LANG['instantiate'] = '未知函數調用。';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['provide_address'] = '必須提供至少一個收件人地址。';
$PHPMAILER_LANG['mailer_not_supported'] = '發信客戶端不被支持。';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 錯誤:收件人地址錯誤:';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>

View File

@ -1,26 +0,0 @@
<?php
/**
* PHPMailer language file: refer to English translation for definitive list
* Simplified Chinese Version
* @author liqwei <liqwei@liqwei.com>
*/
$PHPMAILER_LANG['authenticate'] = 'SMTP 错误:登录失败。';
$PHPMAILER_LANG['connect_host'] = 'SMTP 错误:无法连接到 SMTP 主机。';
$PHPMAILER_LANG['data_not_accepted'] = 'SMTP 错误:数据不被接受。';
//$P$PHPMAILER_LANG['empty_message'] = 'Message body empty';
$PHPMAILER_LANG['encoding'] = '未知编码: ';
$PHPMAILER_LANG['execute'] = '无法执行:';
$PHPMAILER_LANG['file_access'] = '无法访问文件:';
$PHPMAILER_LANG['file_open'] = '文件错误:无法打开文件:';
$PHPMAILER_LANG['from_failed'] = '发送地址错误:';
$PHPMAILER_LANG['instantiate'] = '未知函数调用。';
//$PHPMAILER_LANG['invalid_email'] = 'Not sending, email address is invalid: ';
$PHPMAILER_LANG['mailer_not_supported'] = '发信客户端不被支持。';
$PHPMAILER_LANG['provide_address'] = '必须提供至少一个收件人地址。';
$PHPMAILER_LANG['recipients_failed'] = 'SMTP 错误:收件人地址错误:';
//$PHPMAILER_LANG['signing'] = 'Signing Error: ';
//$PHPMAILER_LANG['smtp_connect_failed'] = 'SMTP Connect() failed.';
//$PHPMAILER_LANG['smtp_error'] = 'SMTP server error: ';
//$PHPMAILER_LANG['variable_set'] = 'Cannot set or reset variable: ';
?>