PHPMAILER Разделить конфигурацию электронной почты на разные функции - PullRequest
0 голосов
/ 26 января 2020

PHPMAILER работает правильно на моем сайте. То, что я хотел бы сделать, это разделить часть конфигурации в отдельную функцию, так что я создаю разные электронные письма с ответами, и все, что мне нужно сделать, это вызвать функцию emailConfig() внутри различных функций ответа.

function continuedInquiry() {
    //config portion I want to separate
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = SMTP::DEBUG_OFF;
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPAuth = true;
    $mail->Username = 'example@gmail.com';
    $mail->Password = 'password';

    /**
      *rest of the phpmailer code
    */
    $mail->send();

    notify();
}

function notify() {

    //notification email
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = SMTP::DEBUG_OFF;
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPAuth = true;
    $mail->Username = 'example@gmail.com';
    $mail->Password = 'password';

    /**
      *rest of the phpmailer code
     */
}

Это работает как надо, но поскольку я использую несколько почтовиков, я бы хотел разделить часть конфигурации на отдельную функцию emailConfig(), например:

function emailConfig() {
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->SMTPDebug = SMTP::DEBUG_OFF;
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
    $mail->SMTPAuth = true;
    $mail->Username = 'example@gmail.com';
    $mail->Password = 'password';
}

, и вызвать ее в другом почтовике функции:

function continuedInquiry() {
    emailConfig();

    /**
      *rest of the phpmailer code
    */
    $mail->send();

    notify();
}

//and so on

Но я продолжаю получать сообщение о том, что $ mail не определено:

enter image description here

Я пытался Вернись, я пробовал аргументы. Это могло бы упростить вещи, но я не могу заставить его работать.

1 Ответ

2 голосов
/ 27 января 2020

Возможно, вам будет проще использовать подкласс для его настройки, например:

<?php

use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\SMTP;

class myMailer extends PHPMailer
{
    public function __construct($exceptions = null)
    {
        $this->isSMTP();
        $this->SMTPDebug = SMTP::DEBUG_OFF;
        $this->Host = 'smtp.gmail.com';
        $this->Port = 587;
        $this->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;
        $this->SMTPAuth = true;
        $this->Username = 'example@gmail.com';
        $this->Password = 'password';
        parent::__construct($exceptions);
    }
}

Тогда в вашем скрипте вы можете просто сделать:

$mail = new myMailer(true);

, и он будет иметь Все настройки выполнены, готовы к использованию.

Тем не менее, неплохо было бы перенести «секреты», такие как ваш пароль, из вашего кода во внешние переменные среды или файлы конфигурации, чтобы вы не заканчивали работу. вставлять пароли в ваше git репо.

...