2013-08-30 20 views
5

Próbuję użyć PHPMailer do wysyłania wiadomości e-mail przez SMTP, ale jak dotąd nie miałem szczęścia. Przeszedłem przez wiele pytań SO, samouczków PHPMailer i postów na forum, ale nadal nie mogę go uruchomić. będę dokumentować jak wielu moich nieudanych prób, jak pamiętam, aby zaoszczędzić czas, ale po pierwsze tu jest kod używam:Poczta wysyłana z PHPMailerem przez SSL przy użyciu SMTP

<?php 
    session_start(); 
    error_reporting(E_ALL); 
    ini_set('display_errors','On'); 

    require('includes/class.phpmailer.php'); 
    include('includes/class.smtp.php'); 
    $mail = new PHPMailer(); 

    $name = $_POST["name"]; 
    $guests = $_POST["guests"]; 
    $time = $_POST["time"]; 

    $message = "<h1>".$name." has booked a table for ".$guests." at ".$time."</h1>"; 

    $mail->IsSMTP(); // telling the class to use SMTP 
    $mail->Host  = "ssl://smtp.gmail.com"; // SMTP server 
    $mail->SMTPDebug = 1;      // enables SMTP debug information (for testing) 
    $mail->SMTPAuth = true;     // enable SMTP authentication 
    $mail->Port  = 26;     // set the SMTP port for the GMAIL server 
    $mail->Username = "[email protected]"; // SMTP account username 
    $mail->Password = "myPassword";  // SMTP account password 
    $mail->SetFrom('[email protected]', 'James Cushing'); 
    $mail->AddReplyTo("[email protected]","James Cushing"); 
    $mail->Subject = "PHPMailer Test Subject via smtp, basic with authentication"; 
    $mail->AltBody = "To view the message, please use an HTML compatible email viewer!"; 
    $mail->MsgHTML($message) 
    $address = "[email protected]"; 
    $mail->AddAddress($address, "James Cushing"); 

    if(!$mail->Send()) { 
     echo "Mailer Error: " . $mail->ErrorInfo; 
    } else { 
     echo "Message sent!"; 
    } 
?> 

Po pierwsze, kiedy uruchomić ten kod teraz mam dwa różne błędy. Na moim lokalnym serwerze pojawia się błąd: SMTP -> BŁĄD: nie można połączyć się z serwerem: upłynął limit czasu operacji (60)
Następujący błąd adresu nie powiodła się: [email protected]: wywołana poczta() bez połączenia
Mailer błąd: Poniższy adres nadawcy nie powiodła się: [email protected]: nazwie mail() bez połączenia

uzyskać moreorless ten sam błąd z systemem tego samego kodu na mój serwer WWW, ale pierwsza linia jest:
SMTP -> BŁĄD: nie można połączyć się z serwerem: sieć jest nieosiągalna (101)

Oczywiście warto zauważyć, że nie używam dosłownej "[email protected]", ale zastąpiłem moją własną wiadomość e-mail dla tego postu.

Czego próbowałem
- Korzystanie z serwera SMTP iCloud
- za pomocą innego portu
- umożliwienie rozszerzenia OpenSSL w moim pliku php.ini
- kopiowanie kodu z różnymi przykładami PHPMailer
- Korzystanie z systemu Google "DisplayUnlockCaptcha" w celu umożliwienia połączeń
- Wysyłanie do iz różnych adresów - Usuwanie "@ gmail.com" z właściwości Nazwa użytkownika - Wiele innych rzeczy, których nie pamiętam

To doprowadza mnie do szaleństwa przez około jeden dzień, więc jeśli ktokolwiek będzie mógł to rozwiązać, będą bohaterami.

Dzięki

+1

Co stanie się po zmianie portu na 465? –

+0

@userNOID To jedna z rzeczy, o których zapomniałem wspomnieć, że próbowałem. Daje mi to: ** SMTP -> ERROR: EHLO nie przyjął z serwera: SMTP -> ERROR: HELO nie przyjął z serwera: SMTP -> ERROR: AUTH nie przyjął z serwera: SMTP -> UWAGA: EOF został złapany podczas sprawdzania, czy jest podłączony ** –

+0

Obsługuje konto SMTP? –

Odpowiedz

25
$mail->IsSMTP(); 
$mail->Host = "smtp.gmail.com"; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = "ssl"; 
$mail->Username = "[email protected]"; 
$mail->Password = "**********"; 
$mail->Port = "465"; 

To konfigurację roboczą.

starają się zastąpić to, co masz

+0

Dzięki Ybert, To faktycznie skierowało mnie we właściwym kierunku i jest teraz naprawione! Mam 99,999% pewności, że miałem dokładnie tę samą konfigurację, która zawiodła wcześniej, ale może jest to kombinacja tego, co zostało zmienione na zapleczu od. Musiałem dodać '$ address =" [email protected] "; $ mail-> AddAddress (adres $, "James Cushing"); $ message = "Treść wiadomości e-mail"; $ mail-> MsgHTML ($ wiadomość); \t jeśli (! $ Mail-> Wyślij()) { \t echo "Błąd programu Mailer:". $ mail-> ErrorInfo; } else { \t echo "Wiadomość wysłana!"; } ' Ale potem działało lokalnie. Testy na moim serwerze już teraz –

+0

OK, uruchamianie go na moim serwerze WWW nadal daje mi ** SMTP -> BŁĄD: Nie udało się połączyć z serwerem: Sieć jest nieosiągalna (101) ** Jesteśmy już w połowie! –

+0

To jest inny błąd. Twój serwer SMTP na serwerze internetowym jest źle skonfigurowany. Ale kod jest dobry. Nie musisz tego zmieniać! – ybert

2

Po pierwsze, korzystać z tych ustawień dla Google:

$mail->IsSMTP(); 
$mail->Host = "smtp.gmail.com"; 
$mail->SMTPAuth = true; 
$mail->SMTPSecure = "tls"; //edited from tsl 
$mail->Username = "myEmail"; 
$mail->Password = "myPassword"; 
$mail->Port = "587"; 

Ale też, co masz firewall skonfigurować?

Jeśli filtrujesz porty TCP 465/995, a może 587, musisz skonfigurować niektóre wyjątki lub usunąć je z listy reguł.

https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

+0

$ mail-> SMTPSecure = "tsl"; powinno być $ mail-> SMTPSecure = "tls"; – Behrens

1

mam podobną awarię z SMTP, gdy mój komputer klient zmienia połączenia z siecią (na przykład w domu vs. sieci biurowej) i jakoś ponowne uruchomienie usługi sieciowej (lub restartu maszyny) rozwiązuje problem dla mnie. Nie jestem pewien, czy dotyczyłoby to twojego przypadku, ale na wszelki wypadek.

sudo /etc/init.d/networking restart # for ubuntu 
2

Nie używaj SSL na porcie 465, to przestarzała od 1998 roku i jest używany tylko przez produkty firmy Microsoft nie dostał notatkę; zamiast tego użyj TLS na porcie 587: Zatem poniższy kod powinien działać bardzo dobrze.

mail->IsSMTP(); // telling the class to use SMTP 
$mail->Host  = "smtp.gmail.com"; // SMTP server 

$mail->SMTPAuth = true;     // enable SMTP authentication 
$mail->SMTPSecure = "tls";     // sets the prefix to the servier 
$mail->Host  = "smtp.gmail.com";  // sets GMAIL as the SMTP server 
$mail->Port  = 587;     // set the SMTP port for the 
+1

Jeśli jednak używasz konkretnego hosta, niektóre mają 465 jako domyślny port. – OzzyTheGiant

+0

Ich wsparcie powinno być w stanie dać ci spacer. – Asuquo12