복붙노트

codeigniter 이메일 라이브러리로 Gmail smtp로 이메일 보내기

PHP

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를 사용하려했지만 실패했습니다.)

이 문제를 어떻게 해결할 수 있습니까?

해결법

  1. ==============================

    1.

    $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 포럼에서

  2. ==============================

    2.PHP 구성에서 SSL을 활성화해야합니다. php.ini를로드하고 다음 행을 찾으십시오.

    PHP 구성에서 SSL을 활성화해야합니다. php.ini를로드하고 다음 행을 찾으십시오.

    ; 확장 = php_openssl.dll

    주석 처리를 제거하십시오. :디

    (명령문에서 세미콜론을 제거하여)

    extension = php_openssl.dll

  3. ==============================

    3.CI 문서 (CodeIgniter Email Library)에 따르면 ...

    CI 문서 (CodeIgniter Email Library)에 따르면 ...

    나는 모든 설정을 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
    
  4. ==============================

    4.다음과 같이 변경하십시오.

    다음과 같이 변경하십시오.

    $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();
    
  5. ==============================

    5.codeigniter를 통해 html 이메일 보내기

    codeigniter를 통해 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());
        }
    
  6. ==============================

    6.Postfix를 사용하는 리눅스 서버에서 일하는 또 다른 옵션은 다음과 같습니다.

    Postfix를 사용하는 리눅스 서버에서 일하는 또 다른 옵션은 다음과 같습니다.

    먼저 CI 이메일을 서버의 이메일 시스템을 사용하도록 설정하십시오 (예 : email.php).

    # alias to postfix in a typical Postfix server
    $config['protocol'] = 'sendmail'; 
    $config['mailpath'] = '/usr/sbin/sendmail'; 
    

    그런 다음 메일을 Google로 중계하도록 엽서를 구성합니다 (발신자 주소에 따라 다름). 아마도 사용자 패스워드 설정을 / etc / postfix / sasl_passwd에 넣어야 할 것이다. (docs)

    보내는 이메일의 일부 또는 전부를 Google에 보내도록 이미 구성된 Linux 상자가 있으면 훨씬 간단합니다 (그리고 조각이 적음).

  7. ==============================

    7.아마도 호스팅 서버와 전자 메일 서버가 같은 위치에 있으며 SMTP 인증을받을 필요가 없을 것입니다. 모든 것을 기본값으로 유지하십시오.

    아마도 호스팅 서버와 전자 메일 서버가 같은 위치에 있으며 SMTP 인증을받을 필요가 없을 것입니다. 모든 것을 기본값으로 유지하십시오.

    $config = array(        
        'protocol' => '',
        'smtp_host' => '',
        'smtp_port' => '',
        'smtp_user' => 'yourname@gmail.com',
        'smtp_pass' => '**********'
        );
    

    또는

    $config['protocol'] = '';
    $config['smtp_host'] = '';
    $config['smtp_port'] = ;
    $config['smtp_user'] = 'yourname@gmail.com';
    $config['smtp_pass'] = 'password';
    

    그것은 나를 위해 작동합니다.

  8. ==============================

    8.다음과 같이 할 수 있습니다.

    다음과 같이 할 수 있습니다.

    CodeIgniter로 이메일을 보내는 중 오류가 발생했습니다.

  9. from https://stackoverflow.com/questions/1555145/sending-email-with-gmail-smtp-with-codeigniter-email-library by cc-by-sa and MIT license