MailTo ile coklu attachment ekleme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

MailTo ile coklu attachment ekleme

Mesaj gönderen gkimirti »

Kod: Tümünü seç

em_mail:='mailto:?subject=Deneme&attachment="c:\windows\system.ini"'
stringini

Kod: Tümünü seç

ShellExecute(Handle,'open', PChar(em_mail), nil, nil,SW_SHOWNORMAL)
ile calıstırınca tek dosyayı maile ekleyerek yeni mail sayfasını acabiliyorum
ama uzun aramalarım ve cabalarım sonucu birden fazla dosyayı nasıl ekleyecegimi bulamadım

Kod: Tümünü seç

mailto:?subject=Deneme&attachment="c:\windows\system.ini","c:\windows\win.ini"
gibi alternatifler deniyorum ama sadece ilk bastaki dosyayı ekliyor.
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
naile
Admin
Mesajlar: 1873
Kayıt: 11 Haz 2003 10:11

Mesaj gönderen naile »

Ben birden fazla attachi şu şekilde yapıyorum:

Kod: Tümünü seç

    for i := 0 to attach_sayisi do
      TIdAttachment.Create(IdMessage1.MessageParts,dosya_adi);
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

mailto:?subject=Deneme&attachment="c:\windows\system.ini","c:\windows\win.ini"

Şeklinde bir kullanım yaptığımda Outlook 2003 "komut satırı değişkenleri geçersiz" şeklinde bir hata mesajı veriyor. Bana lazım olan 1 tane ek dosya eklemek ancak onu da bir türlü başaramadım.
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: MailTo ile coklu attachment ekleme

Mesaj gönderen nodetail »

arkadaşlar ben bu kodu deniyorum;

Kod: Tümünü seç

'mailto:?subject=Deneme&attachment="c:\windows\system.ini"
ama dosyayı eklemiyor hata vermiyor pencere açılıyor konu geliyor gidecek adres geliyor ama dosya yok,
rivayete göre microsoft outlook 'ta sorun yokmuş
ama outlook express ve increditmail'de dosya gelmiyor, bunu nasıl sağlyabiliriz
nodetail
Üye
Mesajlar: 74
Kayıt: 04 Eki 2008 10:30

Re: MailTo ile coklu attachment ekleme

Mesaj gönderen nodetail »

arkadaşlar bu işlemin başka çaresi yokmu ne bilim en azından bir bileşen felan, aktif mail programıyla dosya göndermek istiyorum sadece :(
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

Re: MailTo ile coklu attachment ekleme

Mesaj gönderen csunguray »

Fazla açıklama yapamayacağım. MAPI arabiirimi kullanarak yapılabilir. İlk yazdığınız işlem Office Outlook ile çalışır ama Outlook Express ile çalışmaz. Aşağıdaki kod ikisinde de çalışır.

Kod: Tümünü seç

uses Mapi;

function TDataModule1.SendEMail(Handle: THandle; Mail:TStrings): Cardinal;
type
  TAttachAccessArray = array [0..0] of TMapiFileDesc;
  PAttachAccessArray = ^TAttachAccessArray;
var
  MapiMessage: TMapiMessage;
  Receip: TMapiRecipDesc;
  Attachments: PAttachAccessArray;
  AttachCount: Integer;
  i1: integer;
  FileName: string;
  dwRet: Cardinal;
  MAPI_Session: Cardinal;
  WndList: Pointer;
begin
  dwRet := MapiLogon(Handle,
    PChar(''),
    PChar(''),
    MAPI_LOGON_UI or MAPI_NEW_SESSION,
    0, @MAPI_Session);

  if (dwRet <> SUCCESS_SUCCESS) then
  begin
    MessageBox(Handle,
      PChar('Error while trying to send email'),
      PChar('Error'),
      MB_ICONERROR or MB_OK);
  end
  else
  begin
    FillChar(MapiMessage, SizeOf(MapiMessage), #0);
    Attachments := nil;
    FillChar(Receip, SizeOf(Receip), #0);

    if Mail.Values['to'] <> '' then
    begin
      Receip.ulReserved := 0;
      Receip.ulRecipClass := MAPI_TO;
      Receip.lpszName := StrNew(PChar(Mail.Values['to']));
      Receip.lpszAddress := StrNew(PChar('SMTP:' + Mail.Values['to']));
      Receip.ulEIDSize := 0;
      MapiMessage.nRecipCount := 1;
      MapiMessage.lpRecips := @Receip;
    end;

    AttachCount := 0;

    for i1 := 0 to MaxInt do
    begin
      if Mail.Values['attachment' + IntToStr(i1)] = '' then
        break;
      Inc(AttachCount);
    end;

    if AttachCount > 0 then
    begin
      GetMem(Attachments, SizeOf(TMapiFileDesc) * AttachCount);

      for i1 := 0 to AttachCount - 1 do
      begin
        FileName := Mail.Values['attachment' + IntToStr(i1)];
        Attachments[i1].ulReserved := 0;
        Attachments[i1].flFlags := 0;
        Attachments[i1].nPosition := ULONG($FFFFFFFF);
        Attachments[i1].lpszPathName := StrNew(PChar(FileName));
        Attachments[i1].lpszFileName :=
          StrNew(PChar(ExtractFileName(FileName)));
        Attachments[i1].lpFileType := nil;
      end;
      MapiMessage.nFileCount := AttachCount;
      MapiMessage.lpFiles := @Attachments^;
    end;

    if Mail.Values['subject'] <> '' then
      MapiMessage.lpszSubject := StrNew(PChar(Mail.Values['subject']));
    if Mail.Values['body'] <> '' then
      MapiMessage.lpszNoteText := StrNew(PChar(Mail.Values['body']));

    WndList := DisableTaskWindows(0);
    try
    Result := MapiSendMail(MAPI_Session, Handle,
      MapiMessage, MAPI_DIALOG, 0);
    finally
      EnableTaskWindows( WndList );
    end;

    for i1 := 0 to AttachCount - 1 do
    begin
      StrDispose(Attachments[i1].lpszPathName);
      StrDispose(Attachments[i1].lpszFileName);
    end;

    if Assigned(MapiMessage.lpszSubject) then
      StrDispose(MapiMessage.lpszSubject);
    if Assigned(MapiMessage.lpszNoteText) then
      StrDispose(MapiMessage.lpszNoteText);
    if Assigned(Receip.lpszAddress) then
      StrDispose(Receip.lpszAddress);
    if Assigned(Receip.lpszName) then
      StrDispose(Receip.lpszName);
    MapiLogOff(MAPI_Session, Handle, 0, 0);
  end;
end;

Kullanım:

Kod: Tümünü seç

procedure TFrmNumune.ActionYazdirExecute(Sender: TObject);
var
  Report1: TfrxReport;
  Mail: TStringList;
begin
      Report1.PrepareReport;
      JpegExport.FileName := 'c:\Deneme.jpg';
      JpegExport.OverwritePrompt:=False;
      JpegExport.SeparateFiles:=False;
      JpegExport.ShowDialog:=False;
      Report1.Export(JpegExport);
      Mail := TStringList.Create;
      try
        Mail.values['to'] := 'alici@domain.com';
        Mail.values['subject'] := 'Mail konusu';
        Mail.values['body'] := 'Ayrıntılar ekteki dosyada!';
        Mail.values['attachment0'] := JpegExport.FileName;
        // mail.values['attachment1']:='C:\Test2.txt';
        // mail.values['attachment2']:='C:\Test3.txt';
        DataModule1.SendEMail(Application.Handle, mail);
      finally
        Mail.Free;
      end;
end;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri

Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Cevapla