2013-07-31 6 views
7

Nie mogę zrozumieć, dlaczego jeśli spróbuję użyć klasy wiadomości e-mail CI, to nie wysyła ona wiadomości e-mail, a jeśli korzystam z wersji macierzystej Działa klasa PHP mail().

Należy zauważyć, że czasami otrzymuję komunikat "e-mail wysłany", ale nie jest on wysyłany, a czasami pojawia się komunikat "mój serwer nie jest skonfigurowany".

Próbowałem dowiedzieć się, jak go skonfigurować, ale ... nic ...

kod

Controller następująco:

if($this->form_validation->run()){ 

       //Set Language 
       $this->lang->load('site', $this->session->userdata('lang')); 

       //Random key 
       $user_valid_key = md5(uniqid()); 

       //Prepare email 
       $this->load->library('email', array('mailtype' => 'html')); 
       $this->email->from($this->config->item('email_signup_from'), 'Wondermark.net'); 
       $this->email->to($this->input->post('email')); 
       $this->email->subject($this->lang->line('email_signup_subject')); 

       //Format mail con %s per inserire i campi necessari 
       $signup_msg = sprintf($this->lang->line('email_signup_message'), $this->input->post('fname'), base_url().'main/signup_confirm/'.$user_valid_key); 

       $this->email->message((string)$signup_msg); 

       if($this->email->send()){ 
        //TODO: load view... 
        echo "email sent"; 
       }else{ 
        $to = $this->input->post('email'); 
        mail($to, 'test', 'Other sent option failed'); 
        echo $this->input->post('email'); 
        show_error($this->email->print_debugger()); 
       } 

       //TODO: Add to db 

      }else{ 

      // Form validation failed 

} 
+0

Ufam, że [dokładnie sprawdziłeś klasę wiadomości e-mail] (http://ellislab.com/codeigniter/user-guide/libraries/email.html)? – Ohgodwhy

+0

Yap. Zastanawiam się teraz, czy odbywa się to online, czy "od e-maila" musi być adresem e-mail domeny? (tj .: [email protected])? –

+0

Powiem "tak". w przeciwnym razie musisz być zaufanym nadawcą w rekordzie SPF domeny. Większość [czytaj: dobrych] dostawców poczty e-mail wymaga uwierzytelnienia przed nawiązaniem połączenia z serwerem SMTP w celu wysłania poczty. – Ohgodwhy

Odpowiedz

20

Użyj tego adresu e-mail konfiguracji ..

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

$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'] = 'password'; 

$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]', 'sender_name'); 
$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(); 
+0

TAK! ŁAŁ. Próbowałem wszystkiego, od każdej odpowiedzi z każdej odmiany na tej stronie. Zmieniając konfigurację, ponownie i znowu próbując różnych systemów. Ale to WRESZCIE to zrobiło. Dziękuję Ci. – MrJinPengyou

+1

to rozwiązanie nie działa cały czas. Próbowałem tego. –

+0

Działa do testowania, nie używałby go w produkcji! – Sorin

2

CodeIgniter User: http://ellislab.com/codeigniter/user-guide/libraries/email.html

Ta konfiguracja działa dla ja:

$config = Array(
      'protocol' => 'smtp', 
      'smtp_host' => 'Your SMTP Server', 
      'smtp_port' => 25, 
      'smtp_user' => 'Your SMTP User', 
      'smtp_pass' => 'Your SMTP Pass', 
      'mailtype' => 'html' 
      ); 
$this->load->library('email', $config); 
$this->email->set_newline("\r\n"); 

//Add file directory if you need to attach a file 
$this->email->attach($file_dir_name); 

$this->email->from('Sending Email', 'Sending Name'); 
$this->email->to('Recieving Email address'); 

$this->email->subject('Email Subject'); 
$this->email->message('Email Message'); 

if($this->email->send()){ 
    //Success email Sent 
    echo $this->email->print_debugger(); 
}else{ 
    //Email Failed To Send 
    echo $this->email->print_debugger(); 
} 
+0

Tks. Próbowałem i po prostu ładuję na więcej czasu (próbuję uzyskać dostęp do smtp?) I zgłasza błąd ... –

+0

Dla mnie też pracowałem, dodałem konfigurację na /application/config/email.php – workdreamer

+0

nie działa dla mnie. Wypróbowałem wszystkie sugerowane rozwiązanie –

1

Po kilku godzinach walki z tym samym problemem ostatecznie zdecydowałem się zmienić konfigurację, aby wysłać przez inny serwer. Mój oryginalny serwer z jakiegoś powodu wysyłałby do niektórych adresów, ale nie do innych (w tej samej domenie). Jak tylko zmieniłem na sendgrid, działało zgodnie z oczekiwaniami.

Jeśli nie otrzymujesz oczekiwanych rezultatów, spróbuj użyć innego serwera SMTP. Problem może nie być twoim kodem ...

+0

Mam ten sam problem. Jak to naprawiłeś? – user1424508

+0

Jak już powiedziałem, spróbuj innego serwera SMTP. Możesz również poprosić swojego gospodarza, jeśli istnieją ograniczenia. Na przykład usługa GoDaddy zezwala tylko na wysyłanie wiadomości e-mail za pośrednictwem ich serwerów. –

5

Napotkałem ten problem i znalazłem następujące rozwiązanie. Po prostu drobna zmiana w konfiguracji e-mail i działa w 100%:

$config['protocol'] = 'ssmtp'; 
$config['smtp_host'] = 'ssl://ssmtp.gmail.com'; 
+1

to rozwiązanie również nie działa –

1

Miałem ten sam problem i próbuję pod kodem zamiast funkcji poczty z Codeignitor.

mail('[email protected]' , 'Test', 'Test Email'); 

Działa i poczta jest wysyłana na adres e-mail. Ta wiadomość została wysłana przez już utworzony adres e-mail (jak sądzę). W moim przypadku jest to:

[email protected] 

Skopiowałem ten adres e-mail i wypróbowałem poniższy kod.

$this->email->from('[email protected]', 'www.domainserver.com'); 

I działa dobrze. Wydaje się, że niektóre serwery potrzebują już utworzonego adresu e-mail, aby wysłać wiadomość e-mail, podczas gdy inne NIE są.

Mam nadzieję, że jest to jasne i pomocne.

Powiązane problemy