Thunderbird - tworzenie maila z załącznikiem z poziomu aplikacji.

0

Witam.

Próbuje zrobić tak, aby z poziomu aplikacji otworzył się nowy mail (w Thunderbirdzie) z uzupełnionymi polami: odbiorca, temat, treść oraz z dołączonym plikiem.
Mam coś takiego:

string mail= string.Format("mailto:{0}?subject={1}&body=See attachment.&attachment=\"{2}\"", email, numer, NazwaPliku);
Process.Start(mail);

Nowy mail z odbiorcą, tematem oraz treścią się tworzy lecz nie ma dołączonego pliku.
Z tego co znalazłem w sieci jest to zamierzone działanie Thunderbida ze względów bezpieczeństwa (co by to nie znaczyło).
Orientuje się ktoś jak to poprawnie zrobić?

Z góry dziękuję za pomoc.

1

Cześć,

Uruchamiaj wprost Thunderbird.exe z linią poleceń:

-compose "to='[email protected]',subject='temat',body='treść',attachment='zał1,zał2'"

0

Oba rozwiązania są trochę słabe:

  • nie zawsze da się otworzyć Thunderbirda z wiersza poleceń bez podania ścieżki.
  • po co się ograniczać tylko do Thunderbirda?

O wiele lepszym rozwiązaniem jest skorzystanie z funkcji MAPISendMail https://msdn.microsoft.com/en-us/library/windows/desktop/dd296721%28v=vs.85%29.aspx
Testowałem i działa bardzo ładnie.

0

@mr. kombinuje ze sposobem który podałeś.
Znalazłem w necie bibliotekę do obsługi tej funkcji (SendToCS).

Wiadomość jest tworzona, uzupełnia się temat, treść, dołącza plik, ale tym razem dla odmiany nie ma wpisanego odbiorcy...
Podglądając co jest wywoływane mam:
49eba1db28.png

Jak mogę zweryfikować czemu odbiorca nie jest dodawany?

Ps. Tutaj jest przykładowy projekt: http://www.codeproject.com/Articles/2048/Simple-MAPI-NET - efekt jest identyczny (czyli wiadomość z tematem, treścią i załącznikiem, lecz bez odbiorcy)

0

Cóż ja mam funkcję napisaną w czystym C która wysyła wiadomość i wygląda ona tak:

#include <mapi.h>
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  HWND hwndParent = NULL;
  char* pszAttachPathname = "c:\\temp\\test.txt";
  char* pszAttachFilename = "test.txt";
  char* pszTo = "[email protected]";
  char* pszBody = "blah blah";
  char* csSubject = "subject";
  ULONG (PASCAL *lpfnMAPISendMail)(ULONG, ULONG, MapiMessage*, FLAGS, ULONG);
  HMODULE hMAPI = LoadLibrary( "MAPI32.DLL" );
  int nError = -1;
  if ( hMAPI )
  {
    (FARPROC&)lpfnMAPISendMail = GetProcAddress(hMAPI,"MAPISendMail");
    if ( lpfnMAPISendMail )
    {
      MapiMessage message;
      MapiFileDesc filedesc;
      MapiRecipDesc recip;
      memset( &message, 0, sizeof(message) );
      if ( pszAttachPathname )
      {
        ZeroMemory( &filedesc, sizeof(MapiFileDesc) );
        filedesc.nPosition = (ULONG)-1;
        filedesc.lpszPathName = pszAttachPathname;
        filedesc.lpszFileName = pszAttachFilename;
        message.nFileCount = 1;
        message.lpFiles = &filedesc;
      }
      ZeroMemory( &recip, sizeof(MapiRecipDesc) );
      recip.ulRecipClass = MAPI_TO;
      recip.lpszName = pszTo;
      message.nRecipCount = 1;
      message.lpRecips = &recip;
      message.lpszSubject = (char*)(LPCTSTR)csSubject;
      message.lpszNoteText = pszBody;
      // Bring up the send message dialog
      nError = lpfnMAPISendMail(0, (ULONG)hwndParent, &message, MAPI_LOGON_UI|MAPI_DIALOG, 0);
    }
    FreeLibrary( hMAPI );
  }
  //return nError; // 0/SUCCESS_SUCCESS 1/MAPI_USER_ABORT, 11/MAPI_E_ATTACHMENT_NOT_FOUND
}

A problem wydaje mi się być w ustawianiu składowej recipClass Szkoda, ze w screenie nie rozwinąłeś struktury recips. U mnie wygląda to następująco:

983abb3264.png

0

Nic tam nie ma dlatego nie rozwijałem ;)
fde27174fb.png

Dziwi mnie, że dwie biblioteki ściągnięte z Internetu nie działają w identyczny sposób.
Może to wina mojego systemu.
Możecie przetestować projekt z linka który wcześniej wstawiałem? ( http://www.codeproject.com/Articles/2048/Simple-MAPI-NET

0

Czyli coś jest nie tak skoro jest pusto. Ja niestety nie mam kompilatora C#, więc tego nie sprawdzę. Ale może Ty masz możliwość sprawdzenia mojego kodu?

0

@Mr.YaHooo w tym archiwum jest też exe'k :)

A ja zaraz zobaczę Twój kod.

0

Wypróbowałem tego execa. I muszę powiedzieć, że on chyba wysyła bezpośrednio bez pokazywania okna menadżera. Bo Thunderbird pokazuje okno z uwagą, że aplikacja zewnętrzna próbuje wysłać wiadomość z domyślnego profilu. Czy się zgadzam. Kliknąłem ok, ale żadna wiadomość nie została wysłana. Czyli coś chyba jest nie tak z tą aplikacją albo metodą wysyłania.

0
Mr.YaHooo napisał(a):

O wiele lepszym rozwiązaniem jest skorzystanie z funkcji MAPISendMail https://msdn.microsoft.com/en-us/library/windows/desktop/dd296721%28v=vs.85%29.aspx
Testowałem i działa bardzo ładnie.

Stara sprawa, mimo to podepnę się...

Faktycznie funkcja MAPISendMail działa fajnie z Thunderbirdem.
Jednak za każdym razem, oprócz okna tworzenia wiadomości, niepotrzebnie otwiera mi się główne okno Thunderbirda. Czy można jakoś tego uniknąć?

0
pelsta napisał(a):

Jednak za każdym razem, oprócz okna tworzenia wiadomości, niepotrzebnie otwiera mi się główne okno Thunderbirda. Czy można jakoś tego uniknąć?

Nie mam pojęcia. Mi się nie udało tego zrobić. Nie wiem czy to wina tego, że sam Thunderbird nie pozwala na pokazanie samego okna edycji wiadomości, czy po prostu MAPI tego nie umożliwia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1