Php 将MSMTP与CodeIgniter电子邮件库一起使用

Php 将MSMTP与CodeIgniter电子邮件库一起使用,php,codeigniter,email,Php,Codeigniter,Email,在使用msmtp时,是否有人能够使用标准CodeIgniter电子邮件库成功发送电子邮件 我正在运行Ubuntu,我已经成功地安装和配置了MSMTP。我可以从命令行发送电子邮件,也可以使用默认的PHPmail()函数 我的application/config/email.php文件如下所示 $config = array( 'protocol' => 'sendmail', 'mailpath' => '/usr/bin/msmtp -C /etc/msmtp/.ms

在使用msmtp时,是否有人能够使用标准CodeIgniter电子邮件库成功发送电子邮件

我正在运行Ubuntu,我已经成功地安装和配置了MSMTP。我可以从命令行发送电子邮件,也可以使用默认的PHP
mail()
函数

我的
application/config/email.php
文件如下所示

$config = array(
    'protocol' => 'sendmail',
    'mailpath' => '/usr/bin/msmtp -C /etc/msmtp/.msmtprc -t',
    'smtp_host' => 'smtp.gmail.com',
    'smtp_user' => 'myemail@gmail.com',
    'smtp_pass' => 'xxxxxxxx',
    'smtp_port' => 587,
    'smtp_timeout' => 30,
    'smtp_crypto' => 'tls',
);

但这不起作用。如果有人成功了,最好知道你是怎么做到的。理想情况下,我希望使用CodeIgniter的电子邮件库,因为它有很多我不想自己编写的好功能

我的电子邮件配置如下:

<?php defined('BASEPATH') OR exit('No direct script access allowed.');
// Mail engine switcher: 'CodeIgniter' or 'PHPMailer'
$config['useragent']        = 'PHPMailer';
// 'mail', 'sendmail', or 'smtp'
$config['protocol']         = 'smtp';
$config['mailpath']         = '/project-folder/sendmail';
$config['smtp_host']        = 'smtp.gmail.com';
$config['smtp_user']        = 'Your Gmail Email';
$config['smtp_pass']        = 'Your Gmail Pass';
$config['smtp_port']        = 587;
// (in seconds)
$config['smtp_timeout']     = 30;  
// '' or 'tls' or 'ssl'                     
$config['smtp_crypto']      = 'tls'; 
// PHPMailer's SMTP debug info level: 0 = off, 1 = commands, 2 = commands and data, 3 = as 2 plus connection status, 4 = low level data output.                      
$config['smtp_debug']       = 0; 
// Whether to enable TLS encryption automatically if a server supports it, even if `smtp_crypto` is not set to 'tls'.                       
$config['smtp_auto_tls']    = false; 
// SMTP connection options, an array passed to the function stream_context_create() when connecting via SMTP.                   
$config['smtp_conn_options'] = array();                 
$config['wordwrap']         = true;
$config['wrapchars']        = 76;
// 'text' or 'html'
$config['mailtype']         = 'html'; 
// 'UTF-8', 'ISO-8859-15', ...; NULL (preferable) means config_item('charset'), i.e. the character set of the site.                  
$config['charset']          = null;                     
$config['validate']         = true;
// 1, 2, 3, 4, 5; on PHPMailer useragent NULL is a possible option, it means that X-priority header is not set at all
$config['priority']         = 3;
// "\r\n" or "\n" or "\r"
$config['crlf']             = "\n";
// "\r\n" or "\n" or "\r"                     
$config['newline']          = "\n";                     
$config['bcc_batch_mode']   = false;
$config['bcc_batch_size']   = 200;
// The body encoding. For CodeIgniter: '8bit' or '7bit'. For PHPMailer: '8bit', '7bit', 'binary', 'base64', or 'quoted-printable'.
$config['encoding']         = '8bit';                   

我能够通过CodeIgniter和msmtp发送电子邮件,没有太多麻烦。在我的例子中,我使用Sendgrid,因为我在Gmail和Yahoo中使用msmtp时遇到了身份验证问题。这是我的设置(运行在Ubuntu 14.04、PHP5.5.9上):

msmtp配置-/home/quickshiftin/.msmtpc

代码点火器控制器-应用程序/Controller/Tools.php

电子邮件库配置-application/Config/Email.php

通过CLI发送电子邮件

php index.php工具消息

对您的问题的思考

  • Web服务器或命令行用户是否可读/etc/msmtp/.msmtpc?
    /usr/bin/msmtp
    是否可由所述用户执行
  • 可能在PHP环境中被禁用
  • 用于跟踪调用
    CI\u Email::\u send\u with\u sendmail
    方法,以确定在您的情况下失败的原因
  • 若你们像我一样为msmtp配置了一个日志文件,那个么你们可以在尝试通过代码点火器发送代码以捕获潜在的问题之后查看它

使用msmtp而不是CI默认电子邮件库的目的是什么。您所说的“这不起作用”到底是什么意思?它会出错吗?你的错误是什么?如果说您可以通过
mail()
发送邮件,您的意思是
mail()
转发到您的msmtp设置吗?
account sendgrid
host smtp.sendgrid.net
port 587
auth on
tls on
tls_starttls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
user SendGridUsername
password SendGridPassword
class Tools extends CI_Controller {

    public function message()
    {
        $this->load->library('email');

        $this->email->from('some-dude@gmail.com', 'Nate');
        $this->email->to('another-dude@gmail.com');

        $this->email->subject('Send email through Code Igniter and msmtp');
        $this->email->message('Testing the email class.');

        $this->email->send();
    }
}
$config = [
    'protocol' => 'sendmail',
    'mailpath' => '/usr/bin/msmtp -C /home/quickshiftin/.msmtprc --logfile /var/log/msmtp.log -a sendgrid -t',
];