Saytdan mail göndərilmir – SMTP quraşdırılıb, amma hələ də işləmək istəmir

7 Replies 338 Views Dəstək
·

Leave a rating: Saytdan mail göndərilmir – SMTP quraşdırılıb, amma hələ də işləmək istəmir

You have already rated this thread. Re-rating it will remove your existing rating or review.

Rating:

Raters: Saytdan mail göndərilmir – SMTP quraşdırılıb, amma hələ də işləmək istəmir

Participants
Thread Starter #0
Saytımda son 2 gündür ciddi bir problem yaranıb: heç bir mail göndərilmir.
Nə qeydiyyat təsdiqi gedir, nə də “Şifrəni unutdum” funksiyası işləyir.

Bəzi yoxlamalar etdim, amma hələ də problemi tapa bilmədim. Detallar belədir:

✔ SMTP quraşdırılıb:

  • Host: smtp.gmail.com
  • Port: 587
  • TLS aktiv
  • İstifadəçi adı/parol düzgündür
  • Test mail göndərdim – uğursuz

✔ Xəta mesajı belədir:

“SMTP connect failed”
“Connection timed out”

✔ Hostinglə bağlı ehtimallar:

  • Shared hosting istifadə edirəm
  • Ola bilər portlar bloklanıb, amma dəqiq bilmirəm
  • PHP mail() funksiyası da işləmir

✔ Digər yoxlamalar:

  • Pluginləri deaktiv etdim → Yenə eyni
  • DNS və MX qeydlərini yoxladım → Normal görünür
  • Gmail tərəfdə “Less secure apps” artıq yoxdur, amma App Password istifadə edirəm
  • Hosting support bir şey tapa bilmədi, “kodunuzda problem ola bilər” deyib çıxdılar 😅

❓ Mənim suallarım:

  1. Gmail SMTP-ni shared hostinqdə işlətmək olur?
  2. Connection timeout nəyə işarə edir — port bağlıdır, yoxsa firewall bloklayır?
  3. PHP mail() işləmirsə, növbəti addım nədir?
  4. Alternativ olaraq SendGrid, Mailgun kimi servislər istifadə etmək daha stabil olar?
  5. Debug üçün hansı addımları atım ki, dəqiq səbəbi tapım?

Bu işdə təcrübəsi olanlar varsa, bir az yol göstərsəniz çox yaxşı olar.
Mail göndərilmədiyi üçün saytda qeydiyyat tam dayanıb. 😕
WEBMASTER
Həyatın mənası bir nöqtə-vergüldə gizlidir.
« every fix is a win »
#DevMood
#1
Salam! Saytınızda mail göndərilməsinin dayanması həqiqətən ciddi bir problemdir və başa düşürəm ki, qeydiyyatın dayanması xüsusilə çətin olur. Təqdim etdiyiniz detallı məlumat problemin səbəbini tapmaq üçün çox dəyərlidir. Gəlin, suallarınızı cavablandırıb, effektiv debug addımlarına nəzər salaq.

❗ Problemin Təhlili və Cavablar


  1. Gmail SMTP-ni shared hostinqdə işlətmək olur?
    * Bəli, nəzəri olaraq mümkündür. Lakin shared hosting provayderləri spamın qarşısını almaq üçün çox vaxt SMTP portlarını (xüsusilə 587 və 465) bloklayırlar. Bu, sizin "Connection timed out" xətasının ən real səbəbi ola bilər. Gmail üçün App Password istifadə etməyiniz düzgündür, çünki "Less secure apps" artıq mövcud deyil. Problemin Gmail tərəfində deyil, sizin hosting serveriniz tərəfində olma ehtimalı yüksəkdir.
  2. Connection timeout nəyə işarə edir — port bağlıdır, yoxsa firewall bloklayır?
    * "Connection timed out" mesajı demək olar ki, həmişə sizin serverinizin xarici bir serverə (bu halda smtp.gmail.com) müəyyən bir port (bu halda 587) üzərindən əlaqə qurmağa çalışdığını, lakin bu əlaqənin müəyyən müddət ərzində qurula bilmədiyini göstərir.[/COLOR;
    * Bu, adətən ya [B]hosting serverinizdəki bir firewallın[/B] həmin portdan çıxan əlaqələri bloklaması, ya da həmin portun birbaşa bağlı olması deməkdir.
    * Çox nadir hallarda şəbəkə problemləri də səbəb ola bilər, lakin sizin ssenarinizdə əsas şübhəli hosting provayderinin məhdudiyyətləridir.

  3. PHP mail() işləmirsə, növbəti addım nədir?
    * PHP `mail()` funksiyasının da işləməməsi, problemin təkcə SMTP ilə bağlı olmadığını, daha server səviyyəsində bir mail konfiqurasiya və ya göndərmə problemindən qaynaqlandığını göstərir.
    * Növbəti addımlar:
    * PHP error loglarını yoxlayın. Bu, PHP-nin mail göndərməyə çalışarkən hansı xətanı aldığını göstərə bilər.
    * Server mail loglarını (Exim, Postfix, Sendmail logları) yoxlayın. Əgər hostinginiz cPanel və ya Plesk kimi idarəetmə paneli ilə gəlirsə, bəzən bu loglara daxil olmaq mümkün olur. Bu loglar `mail()` funksiyasının istifadə etdiyi sistem mail agentinin nə üçün mail göndərə bilmədiyini ətraflı izah edəcək.
    * Çox sadə bir PHP skripti ilə `mail()` funksiyasını test edin (aşağıda debug hissəsində nümunə verilib).

  4. Alternativ olaraq SendGrid, Mailgun kimi servislər istifadə etmək daha stabil olar?
    * Bəli, əlbəttə! SendGrid, Mailgun, Postmark, Amazon SES kimi xidmətlər xüsusilə shared hosting mühitlərində mail göndərmə üçün daha stabil, etibarlı və tövsiyə olunan həllərdir.
    * Bu xidmətlər adətən ya API (HTTP-əsaslı) vasitəsilə, ya da özlərinin fərqli SMTP portları (məsələn, 2525) üzərindən işləyirlər ki, bu da shared hostinqlərin blokladığı standart SMTP portlarını (587, 465) yan keçməyə kömək edir.
    * Həmçinin, bu xidmətlər daha yaxşı çatdırılma qabiliyyəti (deliverability), geniş loglama və analitika imkanları təklif edirlər.

  5. Debug üçün hansı addımları atım ki, dəqiq səbəbi tapım?
    * Aşağıda ətraflı debug addımları verilib. Bu addımlar problemin mənbəyini dəqiqləşdirməyə kömək edəcək.



⚙️ Dəqiq Diaqnostika və Debug Addımları


Bu addımları ardıcıl olaraq sınayın. Hər addımdan sonra nəticələri qeyd edin:


1. Hosting Provayderi ilə Əlaqə saxlayın (Daha Dəqiq Məlumatla)


Əvvəlki dəfə bir şey tapa bilməsələr də, indi əlinizdə "Connection timed out" xətası və `mail()` funksiyasının da işləməməsi faktı var.
  • Suallarınızı konkretləşdirin:
    * "Mənim shared hosting serverimdə smtp.gmail.com:587 ünvanına çıxan SMTP əlaqələri bloklanıbmı? Firewall qaydalarını yoxlaya bilərsinizmi?"
    * "PHP `mail()` funksiyası niyə işləmir? Server mail loglarını (Exim, Postfix və ya Sendmail logları) yoxlayıb, `mail()` funksiyasının hansı xəta ilə geri qaytarıldığını mənə deyə bilərsinizmi?"
    * "PHP `sendmail_path` düzgün quraşdırılıb və `sendmail` servisi aktivdirmi?"

  • Onlardan serverdə telnet və ya netcat vasitəsilə smtp.gmail.com 587 ünvanına əlaqə qurmağı xahiş edin. Əgər onlar edə bilməsələr, deməli problem hostingdədir.


2. Telnet/Netcat ilə Port Yoxlanışı (Əgər SSH girişiniz varsa)


Əgər hosting hesabınıza SSH girişiniz varsa, bu, portun bloklanıb-bloklanmadığını dəqiqləşdirməyin ən sürətli yoludur.

CODE
1234
telnet smtp.gmail.com 587
# Və ya əgər telnet yoxdursa:
nc -vz smtp.gmail.com 587


  • Əgər "Connected to..." kimi bir mesaj görsəniz, port açıqdır.
  • Əgər "Connection timed out" və ya "No route to host" kimi mesaj görsəniz, port bloklanıb və ya əlaqə qurulmur. Bu, problemin hosting tərəfində olduğunu təsdiqləyir.


3. Sadə PHP mail() Skripti ilə Test


Yeni bir PHP faylı (məsələn, `test_mail.php`) yaradıb, saytınızın public_html qovluğuna yerləşdirin və brauzerdə çalışdırın.

PHP
1234567891011121314151617181920
<?php
$to = 'ö[email protected]'; // Öz email adresinizi yazın
$subject = 'Test Mail - PHP mail()';
$message = 'Bu bir test mailidir. PHP mail() funksiyası ilə göndərilib.';
$headers = 'From: [email protected]' . "\r\n" .
           'Reply-To: [email protected]' . "\r\n" .
           'X-Mailer: PHP/' . phpversion();

if (mail($to, $subject, $message, $headers)) {
    echo "Mail uğurla göndərildi (və ya ən azından PHP mail() funksiyası uğurla icra edildi).";
} else {
    echo "Mail göndərilmədi. PHP mail() funksiyası xəta qaytardı. Logları yoxlayın.";
    // Daha ətraflı xəta üçün error_get_last() istifadə edə bilərsiniz
    $error = error_get_last();
    if ($error && isset($error['message'])) {
        echo "<br>PHP Xətası: " . $error['message'];
    }
}
?>


  • Əgər mail gəlmirsə və skript "Mail göndərilmədi" mesajını göstərirsə, bu, hostingin `mail()` funksiyası ilə bağlı problemlərini təsdiqləyir. Bu halda hosting provayderinizdən PHP `error_log` və sistem mail loglarını yoxlamalarını xahiş edin.


4. PHPMailer ilə Sadə SMTP Testi


Əgər telnet testi ilə portun açıq olduğu görünsə (bu az ehtimaldır), onda saytınızın koddakı xətanı istisna etmək üçün PHPMailer kimi bir kitabxana ilə birbaşa SMTP bağlantısı test edin.

  • PHPMailer kitabxanasını yükləyin və layihənizə daxil edin (composer ilə `composer require phpmailer/phpmailer`).
  • Yeni bir PHP faylı (məsələn, `test_smtp.php`) yaradıb, aşağıdakı kodu yerləşdirin:

PHP
12345678910111213141516171819202122232425262728293031323334353637
<?php
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// PHPMailer avtomatik yükləyicisini daxil edin (əgər composer istifadə edirsinizsə)
require 'vendor/autoload.php'; // Yolunuzu düzəldin

$mail = new PHPMailer(true);

try {
    // Server ayarları
    $mail->SMTPDebug = 2; // Debug üçün 0=off, 1=client, 2=client and server
    $mail->isSMTP();
    $mail->Host       = 'smtp.gmail.com';
    $mail->SMTPAuth   = true;
    $mail->Username   = '[email protected]'; // Gmail adresiniz
    $mail->Password   = 'sizin-app-parolunuz';   // Gmail App Passwordunuz
    $mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS; // TLS
    $mail->Port       = 587;

    // Göndərən və Alan
    $mail->setFrom('[email protected]', 'Saytınızın Adı');
    $mail->addAddress('[email protected]', 'Alan İstifadəçi'); // Öz email adresinizi yazın

    // Məzmun
    $mail->isHTML(true);
    $mail->Subject = 'PHPMailer SMTP Testi';
    $mail->Body    = 'Bu, PHPMailer ilə göndərilmiş bir [B]SMTP test mailidir.[/B]';
    $mail->AltBody = 'Bu, PHPMailer ilə göndərilmiş bir SMTP test mailidir.';

    $mail->send();
    echo 'Mesaj uğurla göndərildi.';
} catch (Exception $e) {
    echo "Mesaj göndərilə bilmədi. PHPMailer Xətası: {$mail->ErrorInfo}";
}
?>


  • `SMTPDebug = 2` ayarını istifadə edərək, serverlə əlaqə zamanı baş verən bütün prosesləri logda görəcəksiniz. Bu, "Connection timed out" xətasının dəqiq harada baş verdiyini göstərəcək.


5. Alternativ Mail Servislərini Nəzərdən Keçirin


Əgər yuxarıdakı addımlar port blokadasını və ya server tərəfindəki mail göndərmə problemlərini təsdiqləyirsə və hosting dəstəyi heç nə edə bilmirsə:
  • SendGrid, Mailgun, Postmark kimi xidmətləri quraşdırın. Onların PHP üçün rəsmi SDK-ları (kitabxanaları) var və adətən HTTP API vasitəsilə işləyirlər, bu da SMTP portu blokadasını tamamilə yan keçirir.
  • Bu xidmətlər adətən pulsuz sınaq dövrləri və ya hər ay müəyyən sayda pulsuz mail göndərmə imkanları təklif edirlər ki, bu da kiçik və orta ölçülü saytlar üçün yetərli olur.


Nəticə


"Connection timed out" və PHP `mail()` funksiyasının işləməməsi faktları problemin böyük ehtimalla sizin shared hosting provayderinizdəki məhdudiyyətlərlə bağlı olduğunu göstərir. Ən güclü namizəd çıxan SMTP portlarının (587) bloklanmasıdır.

Bu diaqnostik addımları ataraq, hosting dəstəyinə daha konkret məlumatlarla müraciət edə biləcəksiniz. Əgər onlar yenə də problemi həll edə bilməsələr, SendGrid kimi API-əsaslı bir mail servisinə keçid etmək ən yaxşı və ən etibarlı həll yolu olacaqdır.

Ümid edirəm ki, bu məlumatlar probleminizi həll etməyə kömək edəcək! Uğurlar!
#2
Yeni hosta keçid etməyin vaxtı gəlib çatıb.;)
Thread Starter #3
R4STMV said:
Yeni hosta keçid etməyin vaxtı gəlib çatıb.;)
Problemi həll etdim tamamilə. Artıq mail göndərilir ) problem hostingdə imiş. Dəstəyə bildirdim smtp aktiv edildi
WEBMASTER
Həyatın mənası bir nöqtə-vergüldə gizlidir.
« every fix is a win »
#DevMood
#4
İlqar Ramizoğlu said:
Problemi həll etdim tamamilə. Artıq mail göndərilir ) problem hostingdə imiş. Dəstəyə bildirdim smtp aktiv edildi
Əla uğurlar.
#5
R4STMV said:
Yeni hosta keçid etməyin vaxtı gəlib çatıb.;)
Müştəri toplama vaxtıdır Nahid 😄
#6
Schwarz said:
Müştəri toplama vaxtıdır Nahid 😄
Bu dəfə alınmadı 😄
#7
R4STMV said:
Bu dəfə alınmadı 😄
İntro-nu düzgün eləmədin sən ona görə )

You must be logged in to reply.

0 quotes selected