سؤال

أنا أستخدم Symfony + Swiftmailer والحصول على الخطأ التالي من SwiftMailer:

500 | Internal Server Error | Swift_TransportException
Expected response code 220 but got code "", with message ""

ولا يمكن معرفة السبب. أنا أستخدم Hmailserver على جهازك المحلي ، وقمت بإعداد ملف المصانع.

  mailer:
    class: sfMailer
    param:
      logging: %SF_LOGGING_ENABLED%
      charset: %SF_CHARSET%
      delivery_strategy: realtime
      transport:
        class: Swift_SmtpTransport
        param:
          host: splodge.loc
          port: 25
          encryption: ~
          username:   ~
          password:   ~

أنا أستخدم الرمز التالي لإرساله:

$message = $this->getMailer()->compose(
    'noreply@splodge.loc',
    'info@splodge.loc',
    'Reset Password', 
    'Message'
);
$result = $this->getMailer()->send($message);

هل كان لدى أي شخص مشكلة مثل هذا من قبل؟

لقد وجدت أنه في بعض الأحيان ، بشكل عشوائي للغاية ، يمر الإرسال ، لكن في كل مرة ، أحصل على رسالة الخطأ أعلاه. لذا فإن تحديث الصفحة التي ترسل البريد باستمرار ، وفشلت بشكل غير متوقع ، وبما أن الرمز يعمل في بعض الأحيان ، فمن الصعب معرفة ما هو الخطأ.

أي مساعدة سوف تكون في محل تقدير عال!


أظهر مزيد من التحقيقات أن خادم SMTP يرسل [220 LocalHost ESMTP] ، ولكن بعد إلقاء نظرة على سجلات Hmailserver ، اكتشفت ما يلي:

"TCPIP" 5232    "2010-06-16 11:40:54.043"   "TCPConnection - Posting AcceptEx on 0.0.0.0:25"
"DEBUG" 5232    "2010-06-16 11:40:54.043"   "Creating session 51"
"SMTPD" 5232    51  "2010-06-16 11:40:54.043"   "127.0.0.1" "SENT: 220 localhost ESMTP"
"DEBUG" 5296    "2010-06-16 11:40:54.199"   "The read operation failed. Bytes transferred: 0 Remote IP: 127.0.0.1, Session: 51, Code: 10054, Message: An existing connection was forcibly closed by the remote host"
"DEBUG" 5296    "2010-06-16 11:40:54.199"   "Ending session 51"

هل يمكن أن يكون Swiftmailer هو helo/ehloing في وقت مبكر جدا ، وهذا مجرد مشكلة الوقت؟ هل يمكنني تأخير انتقال هيلو قليلا؟

السجلات الجيدة ، عندما يرسل الشيء في الواقع يبدو على النحو التالي:

"TCPIP" 5232    "2010-06-16 11:42:21.278"   "TCPConnection - Posting AcceptEx on 0.0.0.0:25"
"DEBUG" 5232    "2010-06-16 11:42:21.294"   "Creating session 54"
"SMTPD" 5232    54  "2010-06-16 11:42:21.294"   "127.0.0.1" "SENT: 220 localhost ESMTP"
"SMTPD" 5224    54  "2010-06-16 11:42:21.294"   "127.0.0.1" "RECEIVED: EHLO splodge.loc"

لذلك يجب أن يكون الأمر مع إقرار Helo/Ehlo. يرجى تقديم النصيحة! قون

هل كانت مفيدة؟

المحلول 2

تمكنت من الحصول على هذا العمل من خلال إنشاء حلقة تعيد إعادة إرسال البريد ...

$sendResult = false;
do
{
    try
    {
        $message = Swift_Message::newInstance()
            ->setFrom('noreply@splodge.loc', 'Mr.Postman')
            ->setTo($to)
            ->setSubject('Password reminder...')
            ->setBody($this->getPartial('resetPasswordEmail', array(
                'newPassword' => $newPassword)), 'text/html');
        $sendResult = $this->getMailer()->send($message);
    }
    catch(Exception $e){/*Do nothing*/}
}
while($sendResult !== 1);

بعد ذلك سأضيف بعض إعدادات التكوين للحد من عدد عمليات إعادة المحاولة.

نصائح أخرى

يبدو وكأنه مشكلة SMTP.

ماذا يحدث إذا جربت ما يلي من سطر الأوامر:

telnet splodge.loc 25

هل يمكنك الاتصال؟ هل يبدأ خط الرد بـ 220؟

إذا لم يكن الأمر كذلك ، فأنت تواجه مشكلة في تكوين SMTP Server (أو ربما جدار الحماية).

أردت فقط أن أضيف إلى هذا. بالنسبة لي كانت المشكلة عندما إعادة تشغيل SMTP Server ، لم تعود Dovecot. بمجرد أن بدأت دوفيكوت ، كان كل شيء على ما يرام. لذلك في النهاية ، كانت مشكلة SMTP ، لذا إذا كان لدى أي شخص آخر هذه المشكلة ، فيمكنك أن تتأكد إلى حد كبير من مشكلة SMTP.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top