Ich verwende this method, um eine MAPI-E-Mail mit einem PDF-Anhang aus einer Delphi-Anwendung zu senden.Wie wird eine MAPI-E-Mail mit einem Anhang an einen Faxempfänger gesendet?
Es bringt eine MS Outlook „neue Nachricht“ Fenster mit dem PDF-Dokument bereits angebracht ist, und ein leerer Empfänger auf.
Wenn Sie in einem normalen E-Mail-Kontakt, dann geht es durch fein.
Wenn Sie jedoch einen Faxempfänger auswählen, wird er in meinem Ordner "Gesendete Objekte" angezeigt, aber die Zustellung schlägt automatisch fehl (kein Fehler, keine MS Outlook-Nachricht "Zustellung fehlgeschlagen" und keine Zustellung der Nachricht).
Der „Fax-Empfänger“ in MS Outlook mit nichts als eine Faxnummer eingerichtet. Keine E-Mail oder irgendetwas. Wir verwenden eine faxcore server, um diese "Faxe" in den Outlook-Posteingang zu leiten.
Wenn Sie look at this image, das einzige Feld, füllte ich habe für diesen Kontakt in der ein „Business-Fax“ bezeichnet. manuell
Wenn ich (das heißt außerhalb meiner Anwendung) erstellen ein Standard-E-Mail-MS Outlook und wählen Sie das gleiche Fax-Empfänger, und manuell die gleichen PDF anhängen, dann geht es durch fein.
So scheint es, dass etwas über MAPI an eine Faxnummer senden bewirkt, dass es zum Scheitern verurteilt. This post sounds similar, except they get a "message undeliverable" error and I don't.
Kann mir jemand einige Hinweise zu diesem Thema geben?
Dank
Update: Wenn ich MAPI verwenden, um die E-Mail zu erstellen, aber dann ich manuell löschen die Anlage, dann tut Arbeit. Aus Outlook heraus kann ich einen Anhang an einen Faxempfänger senden, aber MAPI schlägt fehl.
Der komplette Quellcode folgt:
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
function SendEMailUsingMAPI(const Subject, Body, FileName, SenderName,
SenderEMail, RecipientName, RecipientEMail: string): integer;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
Mapi;
procedure TForm1.Button1Click(Sender: TObject);
begin
//this will bring up an MS Outlook dialog.
//inside that dialog, if i choose a normal email recipient, it works.
// if i choose a fax recipient, it fails silently.
//if i create the email from w/in outlook, it can go to *either* with success.
SendEmailUsingMAPI(
'Subject', //subject of email
'Body', //body of email text
'c:\my_doc.pdf', //attachment file name
'My name', //sender email name
'[email protected]', //sender email address
'', //recipient email name
''); //recipient email address
end;
function TForm1.SendEMailUsingMAPI(const Subject, Body, FileName, SenderName,
SenderEMail, RecipientName, RecipientEMail: string): Integer;
var
Message: TMapiMessage;
lpSender, lpRecipient: TMapiRecipDesc;
FileAttach: TMapiFileDesc;
SM: TFNMapiSendMail;
MAPIModule: HModule;
FileType: TMapiFileTagExt;
begin
FillChar(Message,SizeOf(Message),0);
if (Subject <> '') then begin
Message.lpszSubject := PChar(Subject);
end;
if (Body <> '') then begin
Message.lpszNoteText := PChar(Body);
end;
if (SenderEmail <> '') then
begin
lpSender.ulRecipClass := MAPI_ORIG;
if (SenderName = '') then begin
lpSender.lpszName := PChar(SenderEMail);
end
else begin
lpSender.lpszName := PChar(SenderName);
end;
lpSender.lpszAddress := PChar(SenderEmail);
lpSender.ulReserved := 0;
lpSender.ulEIDSize := 0;
lpSender.lpEntryID := nil;
Message.lpOriginator := @lpSender;
end;
if (RecipientEmail <> '') then begin
lpRecipient.ulRecipClass := MAPI_TO;
if (RecipientName = '') then begin
lpRecipient.lpszName := PChar(RecipientEMail);
end
else begin
lpRecipient.lpszName := PChar(RecipientName);
end;
lpRecipient.lpszAddress := PChar(RecipientEmail);
lpRecipient.ulReserved := 0;
lpRecipient.ulEIDSize := 0;
lpRecipient.lpEntryID := nil;
Message.nRecipCount := 1;
Message.lpRecips := @lpRecipient;
end
else begin
Message.lpRecips := nil;
end;
if (FileName = '') then begin
Message.nFileCount := 0;
Message.lpFiles := nil;
end
else begin
FillChar(FileAttach,SizeOf(FileAttach),0);
FileAttach.nPosition := Cardinal($FFFFFFFF);
FileAttach.lpszPathName := PChar(FileName);
FileType.ulReserved := 0;
FileType.cbEncoding := 0;
FileType.cbTag := 0;
FileType.lpTag := nil;
FileType.lpEncoding := nil;
FileAttach.lpFileType := @FileType;
Message.nFileCount := 1;
Message.lpFiles := @FileAttach;
end;
MAPIModule := LoadLibrary(PChar(MAPIDLL));
if MAPIModule = 0 then begin
Result := -1;
end
else begin
try
@SM := GetProcAddress(MAPIModule,'MAPISendMail');
if @SM <> nil then begin
Result := SM(0,Application.Handle,Message,
MAPI_DIALOG or MAPI_LOGON_UI,0);
end
else begin
Result := 1;
end;
finally
FreeLibrary(MAPIModule);
end;
end;
if Result <> 0 then begin
MessageDlg('Error sending mail ('+IntToStr(Result)+').',mtError,[mbOK],0);
end;
end;
end.
Toller Vorschlag - Ich habe ein Beispiel dafür gefunden: http://www.swissdelficenter.ch/torry/showcode.php?id=1246 aber es gibt mir genau die gleichen Ergebnisse. – JosephStyons