codeigniter 이메일 라이브러리를 사용하여 Gmail SMTP로 이메일 보내기
<?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
사용 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();
로부터 CodeIgniter의 포럼
PHP 구성에서 SSL을 활성화해야합니다. 로드 php.ini
하고 다음과 같은 줄을 찾습니다.
;extension=php_openssl.dll
주석을 제거하십시오. :디
(문에서 세미콜론을 제거하여)
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'] = '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;
그런 다음 컨트롤러 메서드 중 하나에 다음과 같은 것이 있습니다.
$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();
또한 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'] = "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();
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@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를 사용하는 Linux 서버에서 작업하는 또 다른 옵션 :
First, configure CI email to use your server's email system: eg, in email.php
, for example
# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
Then configure your postfix to relay the mail to google (perhaps depending on the sender address). You'll probably need to put you user-password settings in /etc/postfix/sasl_passwd
(docs)
This is much simpler (and less fragmente) if you have a linux box, already configured to send some/all of its outgoing emails to Google.
Perhaps your hosting server and email server are located at same place and you don't need to go for smtp authentication. Just keep every thing default like:
$config = array(
'protocol' => '',
'smtp_host' => '',
'smtp_port' => '',
'smtp_user' => 'yourname@gmail.com',
'smtp_pass' => '**********'
);
or
$config['protocol'] = '';
$config['smtp_host'] = '';
$config['smtp_port'] = ;
$config['smtp_user'] = 'yourname@gmail.com';
$config['smtp_pass'] = 'password';
it works for me.
It can be this:
If you are using cpanel for your website smtp restrictions are problem and cause this error. SMTP Restrictions
'Program Tip' 카테고리의 다른 글
System.Net.Http 4.2.0.0의 이상한 문제를 찾을 수 없습니다. (0) | 2020.10.23 |
---|---|
HTML에서 입력 및 텍스트 입력 선택-동일한 너비를 만드는 가장 좋은 방법은 무엇입니까? (0) | 2020.10.23 |
Git 예쁜 형식 색상 (0) | 2020.10.23 |
Linux에서 특정 시간에 스크립트를 실행하는 방법은 무엇입니까? (0) | 2020.10.23 |
Java 8 스트림을 Guava ImmutableCollection으로 수집하려면 어떻게해야합니까? (0) | 2020.10.23 |