Indy 10 - idsmtp.send () معلقة عند إرسال الرسائل من حساب Gmail

StackOverflow https://stackoverflow.com/questions/2145515

سؤال

أحاول إرسال بريد إلكتروني باستخدام حساب Gmail (Delphi 7 ، Indy 10) مع هذه الإعدادات:

TIDSMTP:

Port = 587;
UseTLS := utUseExplicitTLS;

tidsslioHandlersocketOpenssl:

SSLOptions.Method := sslvTLSv1;

يبدو أن كل شيء قد تم تعيينه على ما يرام. أحصل على هذا الرد:

Resolving hostname smtp.gmail.com.
Connecting to 74.125.77.109.
SSL status: "before/connect initialization"
SSL status: "before/connect initialization"
SSL status: "SSLv3 write client hello A"
SSL status: "SSLv3 read server hello A"
SSL status: "SSLv3 read server certificate A"
SSL status: "SSLv3 read server done A"
SSL status: "SSLv3 write client key exchange A"
SSL status: "SSLv3 write change cipher spec A"
SSL status: "SSLv3 write finished A"
SSL status: "SSLv3 flush data"
SSL status: "SSLv3 read finished A"
SSL status: "SSL negotiation finished successfully"
SSL status: "SSL negotiation finished successfully"
Cipher: name = RC4-MD5; description = RC4-MD5                 SSLv3 Kx=RSA      Au=RSA  Enc=RC4(128)  Mac=MD5 
; bits = 128; version = TLSv1/SSLv3;

ثم معلقة ولا ينتهي. لم يتم إرسال البريد الإلكتروني. ماذا يمكن أن تكون المشكلة؟

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

المحلول 2

كانت المشكلة بسيطة. لم أكن صبورًا بما فيه الكفاية ولم يتم تعليق التطبيق ، كانت هناك فترة طويلة. كانت المهلة نتيجة للإعدادات الخاطئة.

نصائح أخرى

نعم ، لقد رأيت الكثير من المشكلات مع Indy10 و TLS (عمومًا Gmail).

تأكد أولاً من الحصول على أحدث مكتبات SSL من هنا

لقد رأيت الأكشاك والأخطاء المتقطعة التي تم حلها في إصدار حافة النزيف من Indy (أي إصدار غير مستقر). يرى http://www.indyproject.org/sockets/download/svn.de.aspx

بالنسبة لـ Gmail ، أستخدم بشكل عام ضمنية على المنفذ 465 ..

  idSmtp := TIdSMTP.Create(nil);
  try
    idSmtp.IOHandler := nil;
    idSmtp.ManagedIOHandler := true;

    // try to use SSL
    try
      TIdSSLContext.Create.Free;
      idSmtp.IOHandler := TIdSSLIOHandlerSocketOpenSSL.Create(idSmtp);
      if (smtpSettings.port = 465) then
        idSmtp.UseTLS := utUseImplicitTLS
      else
        idSmtp.UseTLS := utUseExplicitTLS;
    except
      idSmtp.IOHandler.Free;
      idSmtp.IOHandler := nil;
    end;

    if (idSmtp.IOHandler = nil) then
    begin
      idSmtp.IOHandler := TIdIOHandler.MakeDefaultIOHandler(idSmtp);
      idSmtp.UseTLS := utNoTLSSupport;
    end;

    // send message, etc

  finally
    idSmtp.Free;
  end;

أولاً ، هل قمت بالتحقق من أن الرمز يعمل مع خوادم البريد الإلكتروني الأخرى؟

منذ بعض الوقت ، ذكر شخص ما أنهم يواجهون مشاكل مع بعض الخوادم التي تقبل طلبات HTTP مع مكون Indy Tidhttp. كان السبب في أنهم أدرجوا إندي كجزء من المستخدم:

      Request.UserAgent := 'Mozilla/3.0 (compatible; Indy Library)';

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

لست متأكدًا مما إذا كان المكون الذي تستخدمه لديه أي نوع من خاصية useragent. ولكن إذا كان الأمر كذلك ، فلا بد من أي إشارات إلى إندي.

عند اختبار Indy ، يجب أن تكون متأكدًا من أن "إيقاف استثناءات Delphi" يتم التحقق منه (الأدوات ، وخيارات التصحيح ، واستثناءات اللغة).

بعض الإجراءات ، وتحديداً idsmtp.send ، استثناءات "الأكل" (أو الاختباء) مما يؤدي إلى تعليق.

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