Trong chương trình của tôi, tôi đang soạn email để gửi bằng phần mềm ứng dụng khách email mặc định được cài đặt trên máy của người dùng.Làm cách nào để Chương trình Delphi gửi một Email kèm theo Tài liệu đính kèm qua Ứng dụng E-mail DEFAULT?
Tôi đã soạn địa chỉ mailto, chủ đề, nội dung đa cấp và tôi có một số tệp đính kèm để được bao gồm.
Tôi gần như đã làm việc này bằng mailto và ShellExecute như sau:
Message := 'mailto:[email protected]'
+ '?subject=This is the subjectBehold Error Report'
+ '&body=This is line 1' + '%0D%0A'
+ 'This is line 2' + '%0D%0A'
+ 'This is line 3'
+ '&Attach=c:\file1.txt';
RetVal := ShellExecute(Handle, 'open', PChar(Message), nil, nil, SW_SHOWNORMAL);
if RetVal <= 32 then
MessageDlg('Cannot find program to send e-mail.', mtWarning, [mbOK], 0);
Sử dụng Delphi 2009 trên một máy Windows Vista, điều này sẽ mở một Microsoft Mail "Tạo Mail" cửa sổ, với Tổ, Chủ đề và Nội dung được điền chính xác. Tuy nhiên tập tin không được đính kèm.
Khi tôi nghiên cứu điều này, tôi nhận thấy một số bình luận nói rằng kỹ thuật này không hoạt động với tất cả ứng dụng thư khách. Tuy nhiên, hầu hết các bình luận là khá cũ, như tôi nhận ra đây là một kỹ thuật rất cũ.
Sau đó, tôi thấy rằng Zarko Gajic said rằng "phương pháp này là ok, nhưng bạn không thể gửi tệp đính kèm theo cách này".
Tôi cũng thấy rằng Windows API thư đơn giản (MAPI), nhưng Zarko nói rằng chỉ hoạt động nếu người dùng cuối có phần mềm email tuân thủ MAPI. Cũng có các tài liệu kỹ thuật về cách sử dụng MAPI với Delphi (ví dụ: Sending e-mail using mapi), nhưng tất cả đều có tuyên bố từ chối rằng MAPI không phải lúc nào cũng được cài đặt với Windows. Bên cạnh đó, tôi thực sự muốn thông báo xuất hiện đầu tiên trong chương trình email mặc định của người dùng, vì vậy họ sẽ có nó như một phần của hồ sơ email của họ và họ có thể chỉnh sửa và quyết định xem họ có muốn gửi hay không. Tôi không chắc chắn làm thế nào MAPI hoạt động và nếu nó sẽ làm điều đó.
Vì vậy, yêu cầu của tôi là:
Để đưa email lên trong chương trình mail của người dùng.
Để cho phép một hoặc nhiều tệp đính kèm.
Để làm việc với (hy vọng) tất cả ứng dụng email trên bất kỳ máy Windows nào từ XP lên (ví dụ: XP, Vista hoặc 7).
Có con vật như vậy không? Hoặc có thể ai đó biết cách để có được các phần đính kèm để làm việc với kỹ thuật mailto/ShellExecute?
Hầu hết mọi người làm gì?
Edit:
Đã có một vài câu trả lời với các giải pháp MAPI và thậm chí là một giải pháp Indy.
Vấn đề tôi gặp phải là chúng không nhất thiết phải sử dụng ứng dụng thư mặc định. Trên máy Vista của tôi, ví dụ, tôi đã thiết lập Windows Mail làm ứng dụng khách mặc định của mình. Khi tôi gửi MAPI, nó không mang đến Windows Mail, nhưng nó sẽ trả về và thiết lập email trong Outlook. Tôi không muốn điều đó.
Hai trong số người dùng của tôi về chương trình của tôi phàn nàn:
thói quen debug của bạn thất bại trong việc gửi các tập tin, vì nó cố gắng để bắt đầu cửa sổ thư cho một số lý do được biết đến đó là tự thay vì sử dụng các ứng dụng thư mặc định (trong trường hợp thunderbird của tôi)
Tôi đã cố gắng điền vào trường hợp ngoại lệ báo cáo nhưng đã bỏ khi nó yêu cầu máy chủ này, máy chủ đó! Sau đó tôi nhận được thực sự khó chịu vì nó đã khởi chạy Outlook - Tôi chưa bao giờ sử dụng hoặc muốn sử dụng nó.
Tôi không cần mã cho MAPI hoặc Indy. Họ có sẵn. Nhưng nếu bạn đề nghị MAPI hoặc Indy, những gì tôi thực sự cần là một cách để tìm khách hàng mặc định và đảm bảo rằng nó là một trong đó là thông qua email được gửi đi.
Ngoài ra, tôi cần biết liệu MAPI hiện có phổ cập hay không. 5 năm trước, nó không được đảm bảo để hoạt động trên tất cả các máy vì nó không được cài đặt như một phần của hệ điều hành. Điều đó vẫn đúng, hay hiện tại MAPI đi kèm với Windows XP, Vista và 7 theo mặc định?
Các câu hỏi tương tự cũng được áp dụng cho Indy hoặc bất kỳ giải pháp được đề xuất nào khác. Nó có thể làm việc với máy khách mặc định và nó có hoạt động trên hầu hết các máy Windows XP và các phiên bản sau không?
Lý do tại sao giải pháp "mailto" quá đẹp, là tất cả các máy phải hỗ trợ nó cho mục đích xử lý lệnh gửi thư HTML được tìm thấy trên các trang web. Bây giờ, nếu chỉ tôi có thể sử dụng nó để thêm tệp đính kèm ...
Có thể tìm thấy giải pháp: mjustin chỉ ra một giải pháp thay thế sử dụng lệnh gửi của hệ điều hành. Điều đó rất có thể là con đường để đi.
Mailto không giới hạn ở 256 ký tự như HTML mailto, nhưng tôi đã bị tàn phá để tìm hiểu nó đã bị giới hạn ở 2048 ký tự. May mắn thay vài giờ sau, mjustin trả lời.
Nếu việc thực hiện điều đó ổn, câu trả lời của anh ấy sẽ làm điều đó cho tôi. Nếu không, tôi sẽ thêm ý kiến của tôi ở đây.
Không. Khi hóa ra, giải pháp gửi sẽ không luôn mở chương trình email mặc định. Trên máy tính của tôi, nó mở Outlook khi thư mặc định của tôi là Windows Mail. Quá tệ. Tôi đã phải quay trở lại phương thức mailto, mặc dù giới hạn 2048 ký tự.
tôi, tuy nhiên, tìm thấy trong bài viết: SendTo mail recipient rằng:
Tại thời điểm này, bạn có thể thay thế :: ShellExecute với một cái giếng nghĩ :: WinExec cuộc gọi, sử dụng thực tế mailto lệnh dòng được khai báo trong đăng ký và nhắm mục tiêu e-mail ứng dụng khách hiện tại (ví dụ: "% ProgramFiles% \ Outlook Express \ msimn.exe"/mailurl:% 1). Nhưng thì giới hạn là 32 KB. Với tư cách là kết thúc , không có cách nào để gửi email lớn hơn 32KB bằng cách sử dụng giao thức gửi thư .
nhưng sau đó tôi phải xác định ai là ứng dụng thư trong mỗi trường hợp. Tôi hy vọng điều đó sẽ dẫn đến những biến chứng hơn nữa.
Một điều khác mà tôi phát hiện ra là mailto cho phép đặt "thành", "cc", "bcc", "chủ đề" và "nội dung" nhưng không có tệp đính kèm. Trong khi gửi ONLY chỉ cho phép các tập tin đính kèm và sau đó thiết lập một email mặc định với một tin nhắn mặc định và không có cách nào để bạn có thể thiết lập các lĩnh vực khác nhau và cơ thể.
Bạn * cần * cần mã MAPI vì đó là cách gửi e-mail tùy ý bằng ứng dụng khách mặc định.Nếu ứng dụng khách mặc định không hỗ trợ MAPI, thì bạn đã hết Indy không thể gửi thư bằng bất kỳ ứng dụng khách nào khác, Indy * là * ứng dụng thư điện tử trong trường hợp đó.Nếu MAPI không tìm thấy chương trình phù hợp, thì đó là * vấn đề bạn nên điều tra thêm. –
Rob: Nếu MAPI được xây dựng trong hệ điều hành, sau đó tôi cảm thấy tốt hơn về nó.Với XP, mọi người phải cài đặt Outlook (tức là Microsoft Office) trước khi họ nhận được nó.Bạn đang phải đây là một vấn đề. Tôi đã có tất cả mọi thứ làm việc tốt với mailto/ShellExecute ngoại trừ việc nó không hỗ trợ file đính kèm ... nhưng tất cả những suy nghĩ này đang dẫn tôi đến một ý tưởng :-) Tôi sẽ đăng một câu hỏi khác. – lkessler
Khi nó quay ra, tôi không phải tạo ra một câu hỏi khác, vì đã có một câu hỏi: http://stackoverflow.com/questions/198488/drag-drop-inside-an-application-and-to-another- Ứng dụng Chương trình của tôi có thể hoạt động tốt bằng cách trình bày các tệp đính kèm và cho phép người dùng kéo và thả chúng vào ứng dụng email của họ - không hoàn toàn trơn tru như thêm chúng trực tiếp, nhưng nó sẽ hoạt động. – lkessler