<?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'] = '[email protected]';
$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('[email protected]', 'myname');
$this->email->to('[email protected]');
$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
PORT 25/587
を使用
私はこのエラーを受け取りました:
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
今はphpmailerを使いたくありません。 (実際にはphpmailerを使用しようとしましたが、失敗しました)。
この問題を解決するにはどうすればよいですか?
$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();
PHP構成でSSLを有効にする必要があります。 php.ini
をロードし、次の行を見つけます:
;extension=php_openssl.dll
コメントを外します。 :D
(ステートメントからセミコロンを削除することにより)
extension=php_openssl.dll
CIドキュメント( CodeIgniter Email Library )によると...
上記の方法を使用して設定を行いたくない場合は、代わりに設定ファイルに設定することができます。 email.phpという新しいファイルを作成し、そのファイルに$ config配列を追加するだけです。次に、ファイルをconfig/email.phpに保存すると、自動的に使用されます。設定ファイルに設定を保存する場合、$ this-> email-> initialize()関数を使用する必要はありません。
すべての設定をapplication/config/email.phpに入れることで、これを機能させることができました。
$config['useragent'] = 'CodeIgniter';
$config['protocol'] = 'smtp';
//$config['mailpath'] = '/usr/sbin/sendmail';
$config['smtp_Host'] = 'ssl://smtp.googlemail.com';
$config['smtp_user'] = '[email protected]';
$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;
次に、コントローラーメソッドの1つに次のようなものがあります:
$this->load->library('email'); // Note: no $config param needed
$this->email->from('[email protected]', '[email protected]');
$this->email->to('[email protected]');
$this->email->subject('Test email from CI and Gmail');
$this->email->message('This is a test.');
$this->email->send();
また、Cerebroが書いたように、php.iniファイルでこの行のコメントを外して、PHPを再起動する必要がありました。
extension=php_openssl.dll
次のように変更します。
$ci = get_instance();
$ci->load->library('email');
$config['protocol'] = "smtp";
$config['smtp_Host'] = "ssl://smtp.gmail.com";
$config['smtp_port'] = "465";
$config['smtp_user'] = "[email protected]";
$config['smtp_pass'] = "yourpassword";
$config['charset'] = "utf-8";
$config['mailtype'] = "html";
$config['newline'] = "\r\n";
$ci->email->initialize($config);
$ci->email->from('[email protected]', 'Blabla');
$list = array('[email protected]');
$ci->email->to($list);
$this->email->reply_to('[email protected]', 'Explendid Videos');
$ci->email->subject('This is an email test');
$ci->email->message('It is working. Great!');
$ci->email->send();
codeiginater経由でhtmlメールを送信する
$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 protected]', 'Website');
$list = array('[email protected]', '[email protected]');
$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を備えたLinuxサーバーです。
まず、サーバーのメールシステムを使用するようにCIメールを構成します。たとえば、email.php
など
# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
次に、ポストフィックスを設定して、メールをグーグルに中継します(おそらく送信者アドレスに依存します)。おそらく/etc/postfix/sasl_passwd
にユーザーパスワード設定を配置する必要があります (docs)
これは、送信メールの一部またはすべてをGoogleに送信するように既に構成されているLinuxボックスを使用している場合は、はるかに簡単です(断片化も少なくなります)。
おそらく、ホスティングサーバーとメールサーバーは同じ場所にあり、SMTP認証に行く必要はありません。すべてのものをデフォルトのままにしてください:
$config = array(
'protocol' => '',
'smtp_Host' => '',
'smtp_port' => '',
'smtp_user' => '[email protected]',
'smtp_pass' => '**********'
);
または
$config['protocol'] = '';
$config['smtp_Host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = '[email protected]';
$config['smtp_pass'] = 'password';
わたしにはできる。