codeigniter 이메일 라이브러리를 사용하여 Gmail smtp로 이메일 보내기


79
<?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['validation'] = TRUE잘못되었습니다. 인덱스 키가 유효 하므로 사용$config['validate'] = TRUE
Delmo

답변:


122
$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의 포럼


10
+1, 모든 Array 요소는 작은 따옴표 $this->email->set_newline로 묶이고의 매개 변수 만 큰 따옴표로 묶습니다. 이것은 매우 중요하지 않으면 작동하지 않습니다.
Naveen Kumar

11
그 이유는 PHP (및 다른 일부 언어) \n에서 큰 따옴표로 묶인 경우에만 새 줄을 의미하기 때문입니다. 작은 따옴표는 리터럴 문자 \ n을 의미합니다.
DMin

1
해결책은, thnx : for the $ this-> email-> set_newline ( "\ r \ n")
TooCooL

1
@NaveenKumar는 여전히 이메일을 보낼 수 없습니다. 에 어떤 응답을받지$result = $this->email->send();
Pathik Vejani

1
@ThorpeObazee 선생님 메일 구성 파일에 구성을 더 추가 할 수 있습니까? like, $ config [ 'subjectEnquiry'] => "문의 이메일"; 또는 $ config [ 'subjectSuccess'] => "성공적으로 데이터 추가";
ANKIT의 suthar

19

PHP 구성에서 SSL을 활성화해야합니다. 로드 php.ini하고 다음과 같은 줄을 찾습니다.

;extension=php_openssl.dll

주석을 제거하십시오. :디

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

extension=php_openssl.dll


1
이것은 Windows 서버에만 해당됩니다. phpinfo ()를 사용하여 사용 가능한 적절한 소켓이 있는지, 그리고 서버에 openssl이 있는지 확인하십시오.
jjwdesign 2010 년

17

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

$ this-> load-> library ( 'email')를 볼 때마다 이메일 라이브러리 코드를 제공해 주시겠습니까?하지만 이메일 라이브러리가 없습니다. 무엇을 할 수 있습니까? 제가 CI 및 코딩 분야에서 더 새로운 방법을 알려주세요. 당신에게 감사 :)
프라 카쉬 pokhrel

7

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

$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

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());
    }

1

Postfix를 사용하는 Linux 서버에서 작업하는 또 다른 옵션 :

에 예를 들면, 첫째는, 구성의 CI 이메일은 서버의 이메일 시스템을 사용하는 email.php예를 들어,

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

그런 다음 메일을 Google에 릴레이하도록 postfix를 구성합니다 (아마도 발신자 주소에 따라 다름). (문서) 에 사용자 암호 설정을 입력해야 할 것입니다./etc/postfix/sasl_passwd

이미 일부 / 모든 발신 이메일을 Google에 보내도록 구성된 Linux 상자가있는 경우 훨씬 간단하고 단편화가 적습니다.


1

아마도 호스팅 서버와 이메일 서버가 같은 위치에 있고 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';

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


$ config [ 'crlf'] = "\ r \ n"없이 나를 위해 일하지 마십시오; $ config [ 'newline'] = "\ r \ n";
BoCyrill

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.