mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-12-26 00:29:38 +01:00
replacing PHPMailer with Horde_Mime_Mail and Horde_Mail_Transport_Smtphorde to overcome memory limit when sending mails
This commit is contained in:
parent
7f7e013ecf
commit
3e559d2fda
@ -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';
|
||||
|
@ -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
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
?>
|
@ -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
|
||||
{
|
||||
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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ö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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
@ -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: ';
|
||||
?>
|
Loading…
Reference in New Issue
Block a user