Senden von E-Mails mit Gmail SMTP mit Codeigniter-E-Mail-Bibliothek
Lesezeit: 6 Minuten
Shiv
<?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'] = '[email protected]';
$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('[email protected]', 'myname');
$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();
$this->load->view('email_view');
}
}
Ich bekomme diesen Fehler:
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
Verwenden PORT 25/587
Ich habe diesen Fehler:
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
Ich möchte phpmailer jetzt nicht verwenden. (Eigentlich habe ich versucht, phpmailer zu verwenden, aber ich bin gescheitert).
Wie löse ich dieses Problem Jungs?
$config['validation'] = TRUE falsch ist, ist der Indexschlüssel bestätigen also verwenden $config['validate'] = TRUE
+1, Beachten Sie, dass alle Array-Elemente in einfache Anführungszeichen eingeschlossen sind und nur Parameter von $this->email->set_newline wird in doppelte Anführungszeichen eingeschlossen. Das ist sehr wichtig, sonst funktioniert es nicht.
– Naveen Kumar
2. Mai 2012 um 6:56 Uhr
das liegt daran, dass in PHP (und einigen anderen Sprachen) \n bedeutet nur neue Zeile, wenn es in doppelten Anführungszeichen steht. In einfachen Anführungszeichen bedeutet es die wörtlichen Zeichen \n.
– DMin
4. August 2012 um 6:46 Uhr
Die Lösung war,thnx: für $this->email->set_newline(“\r\n”)
– Zu cool
9. Dezember 2015 um 13:05 Uhr
@NaveenKumar kann die E-Mail immer noch nicht senden. bekomme keine antwort rein $result = $this->email->send();
– Pathik Vejani
30. März 2016 um 19:29 Uhr
@ThorpeObazee Sir Können wir der Mail-Konfigurationsdatei weitere Konfigurationen hinzufügen. wie $config[‘subjectEnquiry’] => “Anfrage-E-Mail”; oder $config[‘subjectSuccess’] => “Daten erfolgreich hinzugefügt”;
– ankit suthar
30. März 2017 um 8:54 Uhr
Cerebro
Sie müssen SSL in Ihrer PHP-Konfiguration aktivieren. Aufladen php.ini und finden Sie eine Zeile mit dem folgenden:
;extension=php_openssl.dll
Kommentieren Sie es aus. 😀
(indem das Semikolon aus der Anweisung entfernt wird)
extension=php_openssl.dll
Dies gilt nur für Windows-Server. Verwenden Sie phpinfo(), um zu sehen, ob Sie die richtigen Sockets verfügbar haben und ob openssl auf Ihrem Server ist.
Wenn Sie es vorziehen, die Einstellungen nicht mit der obigen Methode festzulegen, können Sie sie stattdessen in eine Konfigurationsdatei einfügen. Erstellen Sie einfach eine neue Datei namens email.php und fügen Sie das Array $config in dieser Datei hinzu. Dann speichern Sie die Datei unter config/email.php und sie wird automatisch verwendet. Sie müssen die Funktion $this->email->initialize() NICHT verwenden, wenn Sie Ihre Einstellungen in einer Konfigurationsdatei speichern.
Ich konnte dies zum Laufen bringen, indem ich alle Einstellungen vorgenommen habe application/config/email.php.
Dann habe ich in einer der Controller-Methoden so etwas wie:
$this->load->library('email'); // Note: no $config param needed
$this->email->from('[email protected]', '[email protected]');
$this->email->to('[email protected]');
$this->email->subject('Test email from CI and Gmail');
$this->email->message('This is a test.');
$this->email->send();
Außerdem musste ich, wie Cerebro schrieb, diese Zeile in meiner php.ini-Datei auskommentieren und PHP neu starten:
extension=php_openssl.dll
würden Sie mir den Code der E-Mail-Bibliothek geben, jedes Mal, wenn ich $this->load->library(’email’) sah, aber ich habe keine E-Mail-Bibliothek, was kann ich tun? Bitte geben Sie mir einen Weg, ich bin neuer in CI & Codierung. Danke 🙂
Eine andere Option, die ich auf einem Linux-Server mit Postfix habe:
Konfigurieren Sie zunächst CI-E-Mail, um das E-Mail-System Ihres Servers zu verwenden: z. B. in email.phpzum Beispiel
# alias to postfix in a typical Postfix server
$config['protocol'] = 'sendmail';
$config['mailpath'] = '/usr/sbin/sendmail';
Konfigurieren Sie dann Ihr Postfix so, dass die E-Mail an Google weitergeleitet wird (möglicherweise abhängig von der Absenderadresse). Sie müssen wahrscheinlich Ihre Benutzerpassworteinstellungen eingeben /etc/postfix/sasl_passwd (Dokumente)
Dies ist viel einfacher (und weniger fragmentiert), wenn Sie eine Linux-Box haben, die bereits so konfiguriert ist, dass sie einige/alle ausgehenden E-Mails an Google sendet.
Shiplu
Vielleicht befinden sich Ihr Hosting-Server und Ihr E-Mail-Server am selben Ort und Sie müssen sich nicht für die SMTP-Authentifizierung entscheiden. Behalten Sie einfach alles als Standard bei:
$config['validation'] = TRUE
falsch ist, ist der Indexschlüssel bestätigen also verwenden$config['validate'] = TRUE
– Delmo
15. Oktober 2014 um 14:22 Uhr