1

嗨,我们有一个 CRM 系统,一旦管理员更新,就需要更改 SMTP 服务器。我们有一个表,它返回一组数据,其中包含状态为 1 的 SMTP 设置。问题是即使我已将 SMTP 设置发送到 htmlMimeMail.php(类),它仍然会中继到 localhost smtp 这是我的代码:

function sendEmail($txtFrom, $subject, $to, $cc = NULL, $bcc = NULL, $strHTML, $txtModel='')
    {
        $sql  = "SELECT * FROM smtp_server WHERE status='1'";
        $rstemp = $this->cn2->Execute($sql);
        while(!$rstemp->EOF)
        {
            $SMTPid = $rstemp->fields['id'];
            $SMTPServer = $rstemp->fields['server'];
            $SMTPPort = $rstemp->fields['port'];
            $SMTPusername=$rstemp->fields['user'];
            $SMTPpass=$rstemp->fields['pass'];
            $SMTPauth = $rstemp->fields['auth'];
            $rstemp->MoveNext();
        }
        $rstemp->Close();


        $fromEmail  = $txtFrom;
        $from       = $fromEmail;

        $mail = new htmlMimeMail();
        $mail->setTextCharset('utf-8');
        $mail->setHtmlCharset('utf-8');
        $mail->setHeadCharset('utf-8');
        $mail->setSMTPParams($SMTPServer, $SMTPPort,$SMTPid,base64_encode($SMTPusername),base64_encode($SMTPpass),$SMTPServer);         
        $mail->setReturnPath($fromEmail);
        $mail->setFrom($from);
        $mail->setSubject($subject);
        $mail->setHTML($strHTML);

        if(trim($txtModel) != '')
        {
            $file   = strtoupper($txtModel).".pdf";

            if(file_exists($this->dir.$file))
            {
                $attachment = $mail->getFile($this->dir.$file);
                $mail->addAttachment($attachment, $file, "application/pdf");
            }
        }

        if (!is_null($cc) && $cc != '') 
        {
            //$arrEmail = explode(",", $cc);
            $mail->setCc($cc);
            //unset($arrEmail);
        }

        $mail->setBcc($bcc.', sample@email.com');

        $arrEmail = explode(",", $to);      
        ini_set("SMTP",$SMTPServer);
        $result = $mail->send($arrEmail);

        return $result;
    }

我在我的代码中遗漏了什么吗?我还添加了 ini_set

这是接收参数的函数。

function setSMTPParams($host = null, $port = null, $auth = null, $user = null, $pass = null,$helo = null)
{
    if (!is_null($host)) $this->smtp_params['host'] = $host;
    if (!is_null($port)) $this->smtp_params['port'] = $port;
    if (!is_null($helo)) $this->smtp_params['helo'] = $helo;
    if($auth == 4){
        if (!is_null($auth)) $this->smtp_params['auth'] = true;
    }else{
        if (!is_null($auth)) $this->smtp_params['auth'] = false;
    }
    if (!is_null($user)) $this->smtp_params['user'] = $user;
    if (!is_null($pass)) $this->smtp_params['pass'] = $pass;
}
表定义
________________________________________
id|server |port|user|pass|auth |status
________________________________________
1 |本地主机 |25 |null|null|false|0
4 |somesmtp@mail.com|25 |user|pass|true |1
________________________________________
4

1 回答 1

0

据我所知,您将 SMTP 数据发送给班级,但您忽略了告诉班级使用该数据:

$result = $mail->send( $a_to, 'smtp' )

未能在发送中设置第二个参数会导致类默认为“邮件”作为发送类型。

function send($recipients, $type = 'mail')

然后导致您的系统使用默认的 PHP:

$result = mail($to, $subject, $this->output, implode(CRLF, $headers));

在里面:

case 'mail':

函数发送()

我不清楚为什么设置会使用启动 htmlMimeMail 类时设置的 SMTP 默认值,可能会进一步修改创建该结果的代码,我不能说。

我意识到这个问题有点老了,而且当前的 htmlMimeMail 无论如何都不会在当前的 PHP 上运行而不会出现错误,但认为不妨给出一个答案。

于 2015-09-22T21:43:48.820 回答