2011-12-15 47 views
16

Tôi nghĩ hôm qua Amazon đã công bố hỗ trợ SMTP cho SES (Dịch vụ email đơn giản).Email Codeigniter SMTP với Amazon SES

Tôi đã cố gắng gửi email SMTP với Codeigniter mà không có may mắn.

Tôi có một người gửi xác minh và tất cả mọi thứ có vẻ tốt:

$this->load->library('email'); 

$config = array(
    'protocol' => 'smtp', 
    'smtp_host' => 'email-smtp.us-east-1.amazonaws.com', 
    'smtp_user' => 'SMTP USERNAME', 
    'smtp_pass' => 'SMTP PASSWORD', 
    'smtp_port' => 465, 
    'mailtype' => 'html' 
); 

$this->email->initialize($config); 
$this->email->print_debugger(); 

$this->email->from('[email protected]', 'Test From'); 
$this->email->to('[email protected]', 'Test To'); 
$this->email->subject('Test'); 
$this->email->message('test'); 

$this->email->send(); 

Tôi đã thử các smtp_host folowing:

  • email-smtp.us-east-1.amazonaws.com
  • tls : //email-smtp.us-east-1.amazonaws.com
  • ssl: //email-smtp.us-east-1.amazonaws.com
.210

Khi tôi echo print_debugger() tôi nhận được:

220 email-smtp.amazonaws.com ESMTP SimpleEmailService-194655181 
hello: 421 Timeout waiting for data from client. 

Những thử nghiệm chạy trên một MediaTemple (gs) máy chủ.

+0

Đây cũng là trường hợp với khác "chị khuôn khổ" của CodeIgniter - FuelPHP ví dụ. – antitoxic

Trả lời

24

tôi rằng thông điệp của thời gian chờ cho đến khi tôi đã thêm dòng: -

$this->email->set_newline("\r\n"); 

Tôi đã chủ của tôi thiết lập như ssl://email-smtp.us-east-1.amazonaws.com

+0

hi @Stephen, tôi đã thêm các dòng này vào mã của mình, nhưng tôi vẫn gặp lỗi khi tôi gửi tới lỗi gmail của mình: Địa chỉ email chưa được xác minh.'. Nó chỉ hoạt động khi tôi gửi đến cùng một tên miền mà từ đó tôi đã gửi tin nhắn. Bạn có thể cho tôi biết địa chỉ email 'from' và' to' của bạn trong từng trường hợp không? cảm ơn! –

+0

@Stephen, bạn đã tìm thấy điều này ở đâu? Điều đó đã cứu tôi ở đây với khung công tác FuelPHP. – antitoxic

+3

Thật không may lệnh này rõ ràng là cần thiết: thiết lập nó thông qua '$ config ['newline'] = '\ r \ n';' trong 'config/email.php' không hoạt động. – pr1001

4
public function enviar_email($para, $assunto, $mensagem, $formato='html'){ 
      $this->CI->load->library('email'); 
      $config['mailtype']  = $formato; 
      $config['useragent'] = 'Post Title'; 
      $config['protocol']  = 'smtp'; 
      $config['smtp_host'] = 'tls://email-smtp.us-east-1.amazonaws.com'; 
      $config['smtp_user'] = 'smtpuser'; 
      $config['smtp_pass'] = 'smtppass'; 
      $config['smtp_port'] = '465'; 
      $config['wordwrap']  = TRUE; 
      $config['newline']  = "\r\n"; 

      $this->CI->email->initialize($config); 

      $this->CI->email->from('Your Verified Sender Email', 'Post Title'); 
      $this->CI->email->to($para); 
      $this->CI->email->subject($assunto); 
      $this->CI->email->message($mensagem); 


      if($this->CI->email->send()): 
        return TRUE; 
      else: 
        $this->CI->email->print_debugger(); 
      endif; 

    } 
+1

Bạn có thể thêm một số bối cảnh cho câu trả lời của bạn được không. Giải thích mã nguồn do OP cung cấp không đúng và tại sao lại hoạt động. – ChiefTwoPencils

2

Quá trình cài đặt mà làm việc cho tôi trông như thế này:

$test_config['protocol'] = 'smtp'; 
$test_config['smtp_host'] = 'ssl://email-smtp.us-east-1.amazonaws.com'; 
$test_config['smtp_port'] = '465'; 
$test_config['smtp_user'] = 'XXXXXXXXXXXXXXXXXXX'; 
$test_config['smtp_pass'] = 'YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY'; 
$test_config['newline']  = "\r\n"; 

$this->email->initialize($test_config); 

$this->email->from('[email protected]', 'From at Test.com'); 
$this->email->to('[email protected]'); 

$this->email->subject('Email Test'); 
$this->email->message('Testing the email class.'); 

$this->email->send(); 

Ký tự dòng mới phải được đặt thành "\ r \ n" và có thể đặt cược trong tệp cấu hình, nếu quảng cáo rly được đặt là "\ r \ n", không phải là '\ r \ n' như đã lưu ý ở trên.

3

tôi cũng cần thêm dòng

$config['smtp_crypto'] = 'tls'; 

để mảng cấu hình của tôi

đây là supported by CI 2.1.0 and greater

+0

Điều này đã sửa nó cho tôi. Tôi nghĩ Amazon SES yêu cầu điều này ngay bây giờ. Cảm ơn bạn. – AdmiralAdama

1

Bạn cần phải làm 3 điều để có được CI để làm việc với Amazon Simple Dịch vụ Email (SES)

  1. Cần đặt newline = \r\n hoặc bạn sẽ bị hết thời gian chờ.
  2. Cần đặt smtp_crypto thành thứ gì đó. (Yêu cầu mới)
  3. Cần đảm bảo địa chỉ email "từ" được chấp thuận trong Amazon SES. Tôi đã tạo địa chỉ email "from" của mình "[email protected]"

Ngoài ra, bạn nên thiết lập DKIM cho địa chỉ email "từ" của mình để ngăn các email bị đưa vào thư mục spam. Điều này liên quan đến việc đi vào Amazon SES -> Quản lý danh tính -> Địa chỉ email -> DKIM, nhấn nút bật và thêm 3 mục DNS vào DNS của trang web của bạn.

Không cần phải làm gì đặc biệt để thiết lập SPF. Tên miền phong bì amazonses.com vượt qua SPF.

Cuối cùng, hãy đảm bảo sử dụng "trả lời" nếu bạn muốn người dùng có thể trả lời một địa chỉ email khác với địa chỉ email "từ" đã được phê duyệt của bạn. đang làm việc

Ví dụ:

$obj = &get_instance(); 

$config['protocol'] = 'smtp'; 
$config['smtp_host'] = 'email-smtp.us-west-2.amazonaws.com'; 
$config['smtp_user'] = 'USER'; 
$config['smtp_pass'] = 'PASS'; 
$config['smtp_port'] = '587'; 
$config['newline'] = "\r\n"; 
$config['smtp_crypto'] = 'tls'; 
$obj->email->initialize($config); 

$obj->email->set_mailtype('html'); 
// don't html_escape email header variables 
$obj->email->from(MV_FROM_EMAIL, $from_name); 
$obj->email->reply_to($from_email, $from_name); 
$obj->email->to($to); 
$obj->email->subject($subject); 
$obj->email->message($obj->load->view($path, html_escape($data), true)); 
$obj->email->send(); 
+0

Làm việc như một sự quyến rũ - cảm ơn! –

Các vấn đề liên quan