2017-07-15 5 views
2

Hier ist mein Code, in dem eine E-Mail bei der Benutzeranmeldung senden. Es dauert 5 Minuten oder länger, bis jede Mail die E-Mail des Benutzers erreicht. Ich weiß nicht, warum E-Mails so viel Zeit brauchen, um sie zu erreichen. Wenn ich eine E-Mail mit der gleichen Funktion sendEmail() senden nicht mit einem Bestätigungscode nur mit einem einfachen Text. Jetzt dauert es 1 Minute oder 1 n halbe Minuten, um die Benutzer-E-Mail zu erreichen.Senden von E-Mail mit Codeigniter Nehmen so viel Zeit

Manchmal sendet es nicht einmal eine E-Mail, wenn ich den Bestätigungscode am Ende des Links sende.

Ich weiß nicht, wie man die E-Mail mit SMTP sendet. Ich habe einige Beispiele gefunden, in denen sie ihren Domänennamen zu smtp_host, email, password hinzufügen, welche E-Mail mit der Domäne erstellt wird. Ich habe das gleiche getan, aber nichts passiert mit meiner E-Mail senden. Es ist fast identisch mit diesem auch, ob ich SMTP verwende oder nicht.

Das ist meine Funktion Name sendEmail (), die ich das Modell zum Senden von E-Mails erstellt haben. Der Grund, warum ich diese Funktion im Modell erstellt habe, weil ich auch E-Mails von anderen Controllern senden muss. Ich nicht, wenn es ein Problem beim Senden von E-Mails sein könnte

Bitte beachten Sie diese Funktion, wo ich falsch mache. oder wenn es einen anderen Weg gibt, bitte sagen Sie mir, wie Sie das tun. oder jede Art von Vorschlägen wird sehr hilfreich für mich sein.

-Controller

function index() { 
     //my validation rules are here 
     if ($this->form_validation->run() == TRUE) { 

      $data = $this->fetch_data_from_post(); 
      $user_email = $data['email']; 
      $code = random_string('unique'); 
      $verification_link = base_url('Home/verify/').$code; 
      $subject = "Confirmation Message"; 
      $message = "Dear User,\n\n\nPlease click on Given below URL to verify your Email Address ".$verification_link." \n\n Once you click on the above link then your account will be verified and you will get an opportunity to login. See you soon,Thank You...!\n"; 
      $email_sent = $this->Perfect_mdl->sendEmail($user_email,$subject,$message); 

      if($email_sent != 1){ 
       $flash = '<div class="alert alert-danger">Opppssss Somthing went Wrong...</div>'; 
       $this->session->set_flashdata('user_registration',$flash); 
       redirect('Home/signup'); 

      }else{ 
       $this->Perfect_mdl->_insert($data); 
       $flash = '<div class="alert alert-success">You are Successfully Registered... Please Check Your Email <b>'.$user_email.'</b> For Verification</div>'; 
       $this->session->set_flashdata('user_registration',$flash); 
       redirect('Home/signup'); 
      } 
     } 

     $data['meta_title'] = "Signup"; 
     $data['services_name'] = $this->Perfect_mdl->getServices_home(); 
     $dat['flash'] = $this->session->flashdata('user_registration'); 
     $this->load->view('signup',$data); 
    } 

Modell: -

function sendEmail($useremail,$subject,$message) { 


    $config = Array(
    'protocol' => 'smtp', 
    'smtp_host' => 'smtp.mydomainname.com', 
    'smtp_port' => 25, 
    'smtp_user' => '[email protected]', // change it to yours 
    'smtp_pass' => 'vishal123456', // change it to yours 
    'mailtype' => 'html', 
    'charset' => 'iso-8859-1', 
    'crlf' => "\r\n", 
    'newline' => "\r\n", 
    'wordwrap' => TRUE 
    ); 
    $this->load->library('email', $config); 
    $this->email->from('[email protected]', 'Company Name'); 
    $this->email->to($useremail); 


    $this->email->subject($subject); 
    $this->email->message($message); 
    if($this->email->send()){ 
     return "1"; 
    }else{ 
     return "0"; 
    } 
} 
+0

Warum verwenden Sie 'SMTP', senden Sie von einem anderen Server als dem, auf dem der Code läuft? Wenn es alles auf localhost ist, dann gibt es keine Notwendigkeit für "SMTP" – ArtisticPhoenix

+0

Ich weiß nicht, wie SMTP funktioniert.der grund, warum ich smtp verwende, um so schnell wie möglich zu senden, um user-emails zu erreichen. Nein, ich benutze dies mit Server. –

+0

entfernen Sie diese Smpt Config-Array..in Live-Host keine Notwendigkeit, diese smtp config .. – Mahesh

Antwort

1

Es ist nicht die Klasse, die langsam ist, es ist der SMTP-Mail-Server, mit dem Sie versuchen, eine Verbindung herzustellen, die die E-Mail sendet, die die Seite verzögert. hier sind einige meiner Vorschläge.

Zu allererst eine benutzerdefinierte Konfigurationsdatei email.ph p innerhalb application/config erstellen Bitte stellen Sie sicher, dass diese Konfiguration autoloaded.Open ist Ihre Autoload.php innerhalb application/config und schreiben $autoload['config'] = array('email');

In meinem Fall habe ich E-Mails über Webmail-ID sende, so hier ist mein email.php

$config = Array(
    'protocol' => 'smtp', 
    'smtp_host' => 'SMTP_HOST_NAME', 
    'smtp_port' => 25, 
    'smtp_user' => 'SMTP_USER_NAME', // change it to your user name 
    'smtp_pass' => 'SMTP_PASSWORD', // change it to your password 
    'mailtype' => 'html', 
    'charset' => 'iso-8859-1', 
    'wordwrap' => TRUE 
); 

Verwenden Eltern wie dieses Konstrukt:

function __construct() 
{ 
    parent::__construct();   
    $this->load->library('email', $config); 
} 

Und dann können Sie E-Mails einfach nur so aussehen:

$this->email->from('[email protected]', 'Account'); 
$this->email->to('[email protected]'); 
$this->email->cc('[email protected]'); 
$this->email->bcc('[email protected]'); 
$this->email->subject('Account Confirmation'); 
$message = "any message body you want to send"; 
$this->email->message($message); 
$this->email->send(); 

Wenn Sie dieses Verfahren folgende dann vielleicht kann es einige Sekunden speichern.

+0

Nach dem Hinzufügen dieser in mein Konstrukt '$ this-> load-> library ('email', $ config); 'Warum dies einen Fehler verursacht: Undefiniert $ config, aber ich habe bereits einen Dateinamen' email.php' in meinem Config-Ordner erstellt, und fügte auch '$ autoload ['config'] = array ('email'); 'in meine' autoload.php'. –

+0

hast du genauso erstellt wie ich in meiner Antwort? @vishalkumar –

+0

ja ich habe die gleichen Schritte –

1

versuchen, wie dies in Ihrem Controller ....

public function sendResetEmail ($ params) {

 $params['body'] = 'emails/password_reset'; 
     $params['title'] = 'Forgot Password'; 
     $params['subject'] = 'Mail From Admin - Reset Password '; 
     $params['reset_url'] = base_url() . 'login/reset/?key=' . $params['reset_key'] . '&email=' . $params['email_user']; 
     $params['mailtype'] = 'html'; 
     $this->email->set_mailtype("html"); 
     $this->email->from('[email protected]', 'admin'); 
     $this->email->to($params['email_user']); 
     $this->email->subject($params['subject']); 
     $this->email->message($this->load->view('emails/main', $params, true)); 
     $this->email->send(); 
} 
+0

Irgendwann erreicht E-Mail in 2 Minuten. Aber wenn es nicht reicht, dauerte es fünf Minuten. ist es möglich, E-Mails schneller zu versenden (weniger als eine Minute). –

+0

wir verwenden nur diese selbe Funktion..sie empfangen innerhalb einer Minute an den Benutzer ... – Mahesh

Verwandte Themen