initial xclient implementation
This commit is contained in:
parent
05060d446b
commit
a57dc65962
|
|
@ -0,0 +1,54 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This example shows making an SMTP connection with authentication.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//Import the PHPMailer class into the global namespace
|
||||||
|
use PHPMailer\PHPMailer\PHPMailer;
|
||||||
|
use PHPMailer\PHPMailer\SMTP;
|
||||||
|
|
||||||
|
//SMTP needs accurate times, and the PHP time zone MUST be set
|
||||||
|
//This should be done in your php.ini, but this is how to do it if you don't have access to that
|
||||||
|
date_default_timezone_set('Etc/UTC');
|
||||||
|
|
||||||
|
require '../vendor/autoload.php';
|
||||||
|
|
||||||
|
//Create a new PHPMailer instance
|
||||||
|
$mail = new PHPMailer();
|
||||||
|
//Tell PHPMailer to use SMTP
|
||||||
|
$mail->isSMTP();
|
||||||
|
//Enable SMTP debugging
|
||||||
|
//SMTP::DEBUG_OFF = off (for production use)
|
||||||
|
//SMTP::DEBUG_CLIENT = client messages
|
||||||
|
//SMTP::DEBUG_SERVER = client and server messages
|
||||||
|
$mail->SMTPDebug = SMTP::DEBUG_SERVER;
|
||||||
|
//Set the hostname of the mail server
|
||||||
|
$mail->Host = 'mail.example.com';
|
||||||
|
//Set the SMTP port number - likely to be 25, 465 or 587
|
||||||
|
$mail->Port = 25;
|
||||||
|
//Whether to use SMTP authentication
|
||||||
|
$mail->SMTPAuth = false;
|
||||||
|
$mail->SMTPXClient = ['LOGIN' => 'yourname@example.com'];
|
||||||
|
//Set who the message is to be sent from
|
||||||
|
$mail->setFrom('from@example.com', 'First Last');
|
||||||
|
//Set an alternative reply-to address
|
||||||
|
$mail->addReplyTo('replyto@example.com', 'First Last');
|
||||||
|
//Set who the message is to be sent to
|
||||||
|
$mail->addAddress('whoto@example.com', 'John Doe');
|
||||||
|
//Set the subject line
|
||||||
|
$mail->Subject = 'PHPMailer SMTP test';
|
||||||
|
//Read an HTML message body from an external file, convert referenced images to embedded,
|
||||||
|
//convert HTML into a basic plain-text alternative body
|
||||||
|
$mail->msgHTML(file_get_contents('contents.html'), __DIR__);
|
||||||
|
//Replace the plain text body with one created manually
|
||||||
|
$mail->AltBody = 'This is a plain-text message body';
|
||||||
|
//Attach an image file
|
||||||
|
$mail->addAttachment('images/phpmailer_mini.png');
|
||||||
|
|
||||||
|
//send the message, check for errors
|
||||||
|
if (!$mail->send()) {
|
||||||
|
echo 'Mailer Error: ' . $mail->ErrorInfo;
|
||||||
|
} else {
|
||||||
|
echo 'Message sent!';
|
||||||
|
}
|
||||||
|
|
@ -357,6 +357,14 @@ class PHPMailer
|
||||||
*/
|
*/
|
||||||
public $AuthType = '';
|
public $AuthType = '';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* SMTP SMTPXClient command variables
|
||||||
|
* Options are NAME | ADDR | PORT | PROTO | HELO | LOGIN | DESTADDR | DESTPORT
|
||||||
|
*
|
||||||
|
* @var array
|
||||||
|
*/
|
||||||
|
public $SMTPXClient = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An implementation of the PHPMailer OAuthTokenProvider interface.
|
* An implementation of the PHPMailer OAuthTokenProvider interface.
|
||||||
*
|
*
|
||||||
|
|
@ -2025,6 +2033,9 @@ class PHPMailer
|
||||||
} else {
|
} else {
|
||||||
$smtp_from = $this->Sender;
|
$smtp_from = $this->Sender;
|
||||||
}
|
}
|
||||||
|
if (count($this->SMTPXClient)) {
|
||||||
|
$this->smtp->xclient($this->SMTPXClient);
|
||||||
|
}
|
||||||
if (!$this->smtp->mail($smtp_from)) {
|
if (!$this->smtp->mail($smtp_from)) {
|
||||||
$this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
|
$this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
|
||||||
throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
|
throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
|
||||||
|
|
|
||||||
19
src/SMTP.php
19
src/SMTP.php
|
|
@ -963,6 +963,25 @@ class SMTP
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Send SMTP XCLIENT command to server and check its return code.
|
||||||
|
* Possible keys NAME | ADDR | PORT | PROTO | HELO | LOGIN | DESTADDR | DESTPORT
|
||||||
|
* @return bool True on success
|
||||||
|
*/
|
||||||
|
public function xclient(array $vars)
|
||||||
|
{
|
||||||
|
$xclient_options = "";
|
||||||
|
foreach($vars as $key => $value) {
|
||||||
|
if (in_array($key, ['NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'])) {
|
||||||
|
$xclient_options .= " {$key}={$value}";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!$xclient_options) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Send an SMTP RSET command.
|
* Send an SMTP RSET command.
|
||||||
* Abort any transaction that is currently in progress.
|
* Abort any transaction that is currently in progress.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue