Php 使用带有codeigniter电子邮件库的gmail smtp发送电子邮件
使用Php 使用带有codeigniter电子邮件库的gmail smtp发送电子邮件,php,codeigniter,email,smtp,Php,Codeigniter,Email,Smtp,使用端口25/587 我得到了这个错误: <?php class Email extends Controller { function Email() { parent::Controller(); $this->load->library('email'); } function index() { $config['protocol'] = 'smtp';
端口25/587
我得到了这个错误:
<?php
class Email extends Controller {
function Email()
{
parent::Controller();
$this->load->library('email');
}
function index()
{
$config['protocol'] = 'smtp';
$config['smtp_host'] = 'ssl://smtp.gmail.com';
$config['smtp_port'] = '465';
$config['smtp_timeout'] = '7';
$config['smtp_user'] = 'mygmail@gmail.com';
$config['smtp_pass'] = '*******';
$config['charset'] = 'utf-8';
$config['newline'] = "\r\n";
$config['mailtype'] = 'text'; // or html
$config['validation'] = TRUE; // bool whether to validate email or not
$this->email->initialize($config);
$this->email->from('mygmail@gmail.com', 'myname');
$this->email->to('target@gmail.com');
$this->email->subject('Email Test');
$this->email->message('Testing the email class.');
$this->email->send();
echo $this->email->print_debugger();
$this->load->view('email_view');
}
}
A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: unable to connect to ssl://smtp.gmail.com:465 (Connection timed out)
Filename: libraries/Email.php
Line Number: 1641
我现在不想使用phpmailer。(实际上我已经尝试使用phpmailer,但失败了)
伙计们,我该如何解决这个问题
A PHP Error was encountered
Severity: Warning
Message: fsockopen() [function.fsockopen]: SSL operation failed with code 1. OpenSSL Error messages: error:140770FC:SSL routines:func(119):reason(252)
Filename: libraries/Email.php
Line Number: 1641
您需要在PHP配置中启用SSL。加载
php.ini
并找到一行包含以下内容:
extension=php_openssl.dll
;extension=php_openssl.dll
取消注释:D
(从语句中删除分号)
extension=php\u openssl.dll
通过codeiginater发送html电子邮件
$config = Array(
'protocol' => 'smtp',
'smtp_host' => 'ssl://smtp.googlemail.com',
'smtp_port' => 465,
'smtp_user' => 'xxx',
'smtp_pass' => 'xxx',
'mailtype' => 'html',
'charset' => 'iso-8859-1'
);
$this->load->library('email', $config);
$this->email->set_newline("\r\n");
// Set to, from, message, etc.
$result = $this->email->send();
我的另一个选择是在带有后缀的linux服务器中工作: 首先,配置CI电子邮件以使用服务器的电子邮件系统:例如,在
email.php
中
$this->load->library('email');
$this->load->library('parser');
$this->email->clear();
$config['mailtype'] = "html";
$this->email->initialize($config);
$this->email->set_newline("\r\n");
$this->email->from('email@example.com', 'Website');
$list = array('xxxxxxxx@archmage.lk', 'xxxxx@gmail.com');
$this->email->to($list);
$data = array();
$htmlMessage = $this->parser->parse('messages/email', $data, true);
$this->email->subject('This is an email test');
$this->email->message($htmlMessage);
if ($this->email->send()) {
echo 'Your email was sent, thanks chamil.';
} else {
show_error($this->email->print_debugger());
}
然后配置postfix将邮件转发到google(可能取决于发件人地址)。您可能需要将用户密码设置放入/etc/postfix/sasl\u passwd
如果你有一个linux机器,它会简单得多(也不会太零碎),已经配置好向谷歌发送部分/全部发送的电子邮件。根据CI文档()
如果不想使用上述方法设置首选项,可以
而是将它们放入一个配置文件中。只需创建一个名为
在email.php中,在该文件中添加$config数组。然后保存文件
在config/email.php中,它将被自动使用。你不会
如果保存邮件,需要使用$this->email->initialize()函数
配置文件中的首选项
通过将所有设置放入application/config/email.php,我可以实现这一点
# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
然后,在其中一种控制器方法中,我有如下内容:
$config['useragent'] = 'CodeIgniter';
$config['protocol'] = 'smtp';
//$config['mailpath'] = '/usr/sbin/sendmail';
$config['smtp_host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = 'YOUREMAILHERE@gmail.com';
$config['smtp_pass'] = 'YOURPASSWORDHERE';
$config['smtp_port'] = 465;
$config['smtp_timeout'] = 5;
$config['wordwrap'] = TRUE;
$config['wrapchars'] = 76;
$config['mailtype'] = 'html';
$config['charset'] = 'utf-8';
$config['validate'] = FALSE;
$config['priority'] = 3;
$config['crlf'] = "\r\n";
$config['newline'] = "\r\n";
$config['bcc_batch_mode'] = FALSE;
$config['bcc_batch_size'] = 200;
此外,正如Cerbero所写,我必须在php.ini文件中取消注释这一行,然后重新启动php:
$this->load->library('email'); // Note: no $config param needed
$this->email->from('YOUREMAILHERE@gmail.com', 'YOUREMAILHERE@gmail.com');
$this->email->to('SOMEEMAILHERE@gmail.com');
$this->email->subject('Test email from CI and Gmail');
$this->email->message('This is a test.');
$this->email->send();
将其更改为以下内容:
extension=php_openssl.dll
也许您的主机服务器和电子邮件服务器位于同一个位置,您不需要进行smtp身份验证。只需将每件事都保留为默认值,如:
$ci = get_instance();
$ci->load->library('email');
$config['protocol'] = "smtp";
$config['smtp_host'] = "ssl://smtp.gmail.com";
$config['smtp_port'] = "465";
$config['smtp_user'] = "blablabla@gmail.com";
$config['smtp_pass'] = "yourpassword";
$config['charset'] = "utf-8";
$config['mailtype'] = "html";
$config['newline'] = "\r\n";
$ci->email->initialize($config);
$ci->email->from('blablabla@gmail.com', 'Blabla');
$list = array('xxx@gmail.com');
$ci->email->to($list);
$this->email->reply_to('my-email@gmail.com', 'Explendid Videos');
$ci->email->subject('This is an email test');
$ci->email->message('It is working. Great!');
$ci->email->send();
或
它适合我。它可以是:
如果您正在为您的网站使用cpanel,smtp限制是个问题
并导致此错误。SMTP限制
对此有一个非常简单的答案。在en中唯一有效的解决方案就是这个配置。我只需将端口更改为587并覆盖codeignitor默认值“Email.php”
这仅适用于Windows服务器。使用phpinfo()查看是否有合适的套接字可用,以及服务器上是否有openssl。+1注意,所有数组元素都用单引号括起来,只有
$this->email->set_newline
的参数用双引号括起来。这是非常重要的,否则它就不起作用了。这是因为在PHP(和其他一些语言)中,\n
只有在双引号中才表示新行。在单引号中,它表示文字字符\n。解决方案是:对于$this->email->set_newline(“\r\n”)@NaveenKumar仍然无法发送电子邮件。在$result=$this->email->send()中未收到任何响应代码>@ThorpeObazee先生,我们可以在邮件配置文件中添加更多配置吗。比如,$config['subjectinquiry']=>“查询电子邮件”;或$config['subjectSuccess']=>“已成功添加数据”$config['validation']=TRUE
错误,索引键为validate,因此使用$config['validate']=TRUE
如果没有$config['crlf']=“\r\n”,则不适用于我$配置['newline']=“\r\n”;每次我看到$this->load->library('email')但我没有电子邮件库,你能给我提供电子邮件库代码吗??先生,请告诉我一个我在CI和编码方面比较新的方法。谢谢你:)
$config['protocol'] = '';
$config['smtp_host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = 'yourname@gmail.com';
$config['smtp_pass'] = 'password';
$config = array( 'protocol' => 'smtp', 'smtp_host' => 'smtp.gmail.com', 'smtp_port' => 587, 'smtp_user' => 'admin@cafeadmin.com.au', 'smtp_pass' => '1800@Footscray123!' );$this->load->library('email', $config);$this->email->initialize($config);