2012-04-23 38 views
5

Delphi 7 với Indy 10.5.8.0.Delphi và Indy với SSL

Tôi xin lỗi nếu điều này đang khôi phục các câu hỏi đã được hỏi trước đó, nhưng tôi không thể giải quyết vấn đề này.

Tôi đang gửi email HTML có hình ảnh được nhúng bằng cách sử dụng Indy TidMessageBuilderHTML để tạo email html của tôi. Điều này là rất mát mẻ và hoạt động hoàn hảo cho đến nay.

Vấn đề của tôi bây giờ là phục vụ cho các máy chủ SMTP yêu cầu xác thực SSL/TLS. Tôi đã có rất nhiều vấn đề với các tập tin OPENSSL DLL và bây giờ có vẻ như các phiên bản 32 bit không chạy trên 64 bit, vv Tôi muốn có một workaround tránh được bằng cách sử dụng các tập tin DLL. (Và tốt nhất là tôi cần phải giữ nó đơn exe. Ứng dụng).

Câu hỏi của tôi sau đó: Tôi muốn sử dụng Indy V10 vì không cần phải gửi dll OPENSSL. Có cách nào để làm điều này không? Không có thư viện SSL delphi có sẵn hỗ trợ Indy ssl (TIdSSLIOHandlerSocketOpenSSL)?

Ngoài ra, tôi mở các đề xuất khác sẽ tạo điều kiện thuận lợi cho email html của tôi với hình ảnh được nhúng. Cảm ơn bạn.

+0

nếu bạn muốn "mọi thứ" vào exe, bạn cần nhúng các dll, trước tất cả các đơn vị khác trong mệnh đề sử dụng của tệp dpr của bạn, thêm đơn vị mục đích duy nhất là trích xuất các dll từ ứng dụng khi khởi tạo . Có vẻ kỳ quặc rằng dll của bạn không hoạt động trên x64 ... – ComputerSaysNo

+0

Liên kết tĩnh của SSL dường như là một cái gì đó mà không ai làm được, có lẽ vì các phụ thuộc của thư viện C quá phức tạp. Nhúng và sau đó tải các dll SSL dường như là lựa chọn duy nhất của bạn, và có, một 32 bit DLL sẽ làm việc trên các cửa sổ 64 bit. Tại sao không? –

+2

Chỉ cần một sidenote. Bạn có thể nhận thư viện 'OpenSSL' tương thích' Indy' từ ['here'] (http://indy.fulgan.com/SSL/). Ở đó bạn cũng sẽ tìm thấy các phiên bản 64-bit của các thư viện. – TLama

Trả lời

2

Bạn đã hỏi về các thư viện hỗ trợ lớp TIdSSLIOHandlerSocketOpenSSL, nhưng đó chính xác là lớp yêu cầu các DLL bên ngoài, trong phương thức TIdSSLIOHandlerSocketOpenSSL.StartSSL của nó. Giải pháp đơn giản nhất là gửi các tệp DLL (phiên bản 32 bit hoặc 64 bit) và cũng kiểm tra thời gian chạy DLL trước khi thử gọi hàm "SendMail", bằng cách này bạn có thể trình bày thông báo lỗi dễ hiểu hơn cho người dùng của mình cho biết chính xác các tệp nào được ứng dụng của bạn tìm thấy.

Các vấn đề liên quan