首页 > 解决方案 > 请任何人都可以解释这个代码,我正在处理发送 php 代码的电子邮件,我在 GitHub 上找到了这个代码?

问题描述

private function getSMTPSettingList()
{
    $configs = OW::getConfig()->getValues('base');

    return array(
        'connectionPrefix' => $configs['mail_smtp_connection_prefix'],
        'host' => $configs['mail_smtp_host'],
        'port' => $configs['mail_smtp_port'],
        'user' => $configs['mail_smtp_user'],
        'password' => $configs['mail_smtp_password']
    );
}

这是我在 oxwal mail service.php 的 GitHub 上找到的代码

我是 php 新手,所以我从这段代码中得到帮助……但我什么都不懂……

这是整个代码现在我如何使用此功能从我的网站发送电子邮件...

类 BOL_MailService {

const MAIL_COUNT_PER_CRON_JOB = 50;

const TRANSFER_SMTP = 'smtp';
const TRANSFER_MAIL = 'mail';
const TRANSFER_SENDMAIL = 'sendmail';
private $mailDao;
private $defaultMailSettingList = array();

private function __construct()
{
    $this->mailDao = BOL_MailDao::getInstance();

    $siteName = OW::getConfig()->getValue('base', 'site_name');
    $siteEmail = OW::getConfig()->getValue('base', 'site_email');
    $senderSuffix = defined('OW_SENDER_MAIL_SUFFIX') ? OW_SENDER_MAIL_SUFFIX : null;

    $this->defaultMailSettingList = array(
        'sender' => array($siteEmail, $siteName),
        'senderSuffix' => intval($senderSuffix)
    );
}
/**
 * Class instance
 *
 * @var BOL_MailService
 */
private static $classInstance;

/**
 *
 * @var PHPMailer
 */
private $phpMailer;

/**
 * Returns class instance
 *
 * @return BOL_MailService
 */
public static function getInstance()
{
    if ( !isset(self::$classInstance) )
    {
        self::$classInstance = new self();
    }

    return self::$classInstance;
}

/**
 *
 * @return PHPMailer
 */
private function getMailer()
{
    if ( !isset($this->phpMailer) )
    {
        $this->phpMailer = $this->initializeMailer($this->getTransfer());
    }

    return $this->phpMailer;
}

/**
 *
 * @return PHPMailer
 */
private function initializeMailer( $transfer )
{
    $mailer = new PHPMailer(true);

    switch ( $transfer )
    {
        case self::TRANSFER_SMTP :
            $this->smtpSetup($mailer);
            break;
        case self::TRANSFER_SENDMAIL :
            $mailer->IsSendmail();
            break;
        case self::TRANSFER_MAIL :
            $mailer->IsMail();
            break;
    }

    $mailer->CharSet = "utf-8";

    return $mailer;
}

public function getTransfer()
{
    if ( OW::getConfig()->getValue('base', 'mail_smtp_enabled') )
    {
        return self::TRANSFER_SMTP;
    }

    return self::TRANSFER_MAIL;
}

private function getSMTPSettingList()
{
    $configs = OW::getConfig()->getValues('base');

    return array(
        'connectionPrefix' => $configs['mail_smtp_connection_prefix'],
        'host' => $configs['mail_smtp_host'],
        'port' => $configs['mail_smtp_port'],
        'user' => $configs['mail_smtp_user'],
        'password' => $configs['mail_smtp_password']
    );
}

/**
 *
 * @param PHPMailer $mailer
 */
private function smtpSetup( $mailer )
{
    $settingList = $this->getSMTPSettingList();

    $mailer->SMTPSecure = $settingList['connectionPrefix'];
    $mailer->IsSMTP();
    $mailer->SMTPAuth = true;
    $mailer->SMTPKeepAlive = true;
    $mailer->Host = $settingList['host'];

    if ( !empty($settingList['port']) )
    {
        $mailer->Port = (int) $settingList['port'];
    }

    $mailer->Username = $settingList['user'];
    $mailer->Password = $settingList['password'];
}

public function smtpTestConnection()
{
    if ( $this->getTransfer() !== self::TRANSFER_SMTP )
    {
        throw new LogicException('Mail transfer is not SMTP');
    }

    $mailer = $this->getMailer();

    try
    {
        return $mailer->SmtpConnect();
    }
    catch ( phpmailerException $e )
    {
        throw new InvalidArgumentException($e->getMessage());
    }
}

/**
 *
 * @return BASE_CLASS_Mail
 */
public function createMail()
{
    $mail = new BASE_CLASS_Mail($this->defaultMailSettingList);

    return $mail;
}

private function createMailFromDto( BOL_Mail $mailDto )
{
    $mail = new BASE_CLASS_Mail();
    $mail->addRecipientEmail($mailDto->recipientEmail);
    $mail->setSender($mailDto->senderEmail, $mailDto->senderName);
    $mail->setSubject($mailDto->subject);
    $mail->setTextContent($mailDto->textContent);
    $mail->setHtmlContent($mailDto->htmlContent);
    $mail->setSentTime($mailDto->sentTime);
    $mail->setPriority($mailDto->priority);
    $mail->setSenderSuffix($mailDto->senderSuffix);

    return $mail;
}

private function prepareFromEmail( $email, $suffix )
{
    if ( empty($email) )
    {
        return null;
    }

    $suffix = intval($suffix);

    if ( empty($suffix) )
    {
        return $email;
    }

    list($user, $provider) = explode('@', $email);

    return $user . '+' . $suffix . '@' . $provider;
}

public function send( BASE_CLASS_Mail $mail )
{
    $mailer = $this->getMailer();
    $mailState = $mail->saveToArray();

    $event = new OW_Event('base.mail_service.send.check_mail_state', array(), $mailState);
    OW::getEventManager()->trigger($event);
    $mailState = $event->getData();

    if ( empty($mailState['recipientEmailList']) )
    {
        return false;
    }

    $fromEmail = $this->prepareFromEmail($mailState['sender'][0], $mailState['senderSuffix']);

    $mailer->SetFrom($fromEmail, $mailState['sender'][1]);
    $mailer->Sender = $mailState['sender'][0];

    if ( !empty($mailState['replyTo']) )
    {
        $mailer->AddReplyTo($mailState['replyTo'][0], $mailState['replyTo'][1]);
    }
    foreach ( $mailState['recipientEmailList'] as $item )
    {
        $mailer->AddAddress($item);
    }

    $isHtml = !empty($mailState['htmlContent']);

    $mailer->Subject = $mailState['subject'];
    $mailer->IsHTML($isHtml);
    $mailer->Body = $isHtml ? $mailState['htmlContent'] : $mailState['textContent'];
    $mailer->AltBody = $isHtml ? $mailState['textContent'] : '';

    $result = $mailer->Send();
    $mailer->ClearReplyTos();
    $mailer->ClearAllRecipients();

    return $result;
}

private function mailToDtoList( BASE_CLASS_Mail $mail )
{
    $mailState = $mail->saveToArray();
    $resultList = array();

    foreach ( $mailState['recipientEmailList'] as $email )
    {
        $mailDto = new BOL_Mail();

        $mailDto->senderEmail = $mailState['sender'][0];
        $mailDto->senderName = $mailState['sender'][1];
        $mailDto->subject = $mailState['subject'];
        $mailDto->textContent = $mailState['textContent'];
        $mailDto->htmlContent = $mailState['htmlContent'];
        $mailDto->sentTime = empty($mailState['sentTime']) ? time() : $mailState['sentTime'];
        $mailDto->priority = $mailState['priority'];
        $mailDto->recipientEmail = $email;
        $mailDto->senderSuffix = intval($mailState['senderSuffix']);

        $resultList[] = $mailDto;
    }

    return $resultList;
}

public function addToQueue( BASE_CLASS_Mail $mail )
{
    $dtoList = $this->mailToDtoList($mail);

    foreach ( $dtoList as $dtoMail )
    {
        $this->mailDao->save($dtoMail);
    }
}

public function addListToQueue( array $mailList )
{
    $fullDtoList = array();

    foreach ( $mailList as $mail )
    {
        $dtoList = $this->mailToDtoList($mail);

        foreach ( $dtoList as $mailDto )
        {
            $fullDtoList[] = $mailDto;
        }
    }

    if ( !empty($fullDtoList) )
    {
        $this->mailDao->saveList($fullDtoList);
    }
}

public function processQueue( $count = self::MAIL_COUNT_PER_CRON_JOB )
{
    $list = $this->mailDao->findList($count);

    $processedIdList = array();

    foreach ( $list as $item )
    {
        try
        {
            $mail = $this->createMailFromDto($item);
            $this->send($mail);
        }
        catch ( Exception $e )
        {
            //Skip invalid email adresses
        }

        $this->mailDao->updateSentStatus($item->id);
    }

    $this->mailDao->deleteSentMails();
}

public function getEmailDomain()
{
    switch ( $this->getTransfer() )
    {
        case self::TRANSFER_SMTP:
            $settings = $this->getSMTPSettingList();
            return $settings['host'];

        default:
            $urlInfo = parse_url(OW_URL_HOME);
            return $urlInfo['host'];
    }
}

public function deleteQueuedMailsByRecipientId( $userId )
{
    $user = BOL_UserService::getInstance()->findUserById($userId);

    if ( $user === null )
    {
        return;
    }

    $this->mailDao->deleteByRecipientEmail($user->email);
}

public function __destruct()
{
    $this->getMailer()->SmtpClose();
}

}

标签: php

解决方案


这是发送邮件的简单 PHP 邮件函数

 $to      = $email_id;
 $subject = "Test Subject";
 $message = "Your mail Body Content. you also use here HTML Tags for better UI. ";
 $headers = 'From: xyz@domainname.com' . "\r\n" .
  'Reply-To: xyz@domainname.com' . "\r\n" .
  'X-Mailer: PHP/' . phpversion();
 $headers.= "MIME-Version: 1.0" . "\r\n";
 $headers.= "Content-type:text/html;charset=UTF-8" . "\r\n";

 $test=mail($to, $subject, $message, $headers);

或下载 PHPMailer 库并参考以下示例

ini_set('SMTP', "smtp.gmail.com"); // Your domain SMTP
ini_set('smtp_port', "465"); // here we write your domain SMTP port
ini_set('sendmail_from', "xxxx@domain.com"); // your email make sure email id is available on above mention SMTP 
ini_Set('password',"xxxxxx"); // email account password


require 'C:\xampp\htdocs\demo\PHPMailer_5.2.4\class.phpmailer.php'; //load phpmailer library here

$mail = new PHPMailer;
$mail->IsSMTP();         // send via SMTP
//IsSMTP();             // send via SMTP
$mail->SMTPAuth = true;  // turn on SMTP authentication
$mail->Host="smtp.gmail.com";
$mail->Mailer="smtp"; // domain SMTP
$mail->port=465; // Domain mail port
$mail->Username = "abc@gmail.com";   // SMTP username
$mail->Password = "xxxxx";      // SMTP password

$webmaster_email = "abc@gmail.com";     //Reply to this email ID
$email="abc@test.com";                 // Recipients email ID
$name="Test mail";             // Recipient's name
$mail->From = $webmaster_email;
$mail->FromName = "Test Name";
$mail->AddAddress($email,$name);
$mail->AddReplyTo($webmaster_email,"Webmaster");
$mail->WordWrap = 50; // set word wrap
$mail->AddAttachment("/var/tmp/file.tar.gz");        // attachment
$mail->AddAttachment("/tmp/image.jpg", "new.jpg");   // attachment
$mail->IsHTML(true); // send as HTML
$mail->Subject = "Thanks For Connecting";
$mail->Body = "This is your mail body"; //HTML Body
$mail->AltBody = "This is the body when user views in plain text format";     //Text Body
if(!$mail->Send())
{
    echo "Mailer Error: " . $mail->ErrorInfo;
}
else
{
    echo "Message has been sent";
}

推荐阅读