public static int SendMail(string strAttachmentFileName, string strSubject, string to) { IntPtr session = new IntPtr(0); IntPtr winhandle = new IntPtr(0); MapiMessage msg = new MapiMessage(); msg.subject = strSubject; int sizeofMapiDesc = Marshal.SizeOf(typeof(MapiFileDesc)); IntPtr pMapiDesc = Marshal.AllocHGlobal(sizeofMapiDesc); MapiFileDesc fileDesc = new MapiFileDesc(); fileDesc.position = -1; int ptr = (int)pMapiDesc; string path = strAttachmentFileName; fileDesc.name = Path.GetFileName(path); fileDesc.path = path; Marshal.StructureToPtr(fileDesc, (IntPtr)ptr, false); msg.files = pMapiDesc; msg.fileCount = 1; List<MapiRecipDesc> recipsList = new List<MapiRecipDesc>(); MapiRecipDesc recipient = new MapiRecipDesc(); recipient.recipClass = 1; recipient.name = to; recipsList.Add(recipient); int size = Marshal.SizeOf(typeof(MapiRecipDesc)); IntPtr intPtr = Marshal.AllocHGlobal(recipsList.Count * size); int recipPtr = (int)intPtr; foreach (MapiRecipDesc mapiDesc in recipsList) { Marshal.StructureToPtr(mapiDesc, (IntPtr)recipPtr, false); recipPtr += size; } msg.recips = intPtr; msg.recipCount = 1; int result = MAPISendMail(session, winhandle, msg, MAPI_LOGON_UI | MAPI_DIALOG, 0); return result; }
int SendMail(string strSubject, string strBody, int how) { MapiMessage msg = new MapiMessage(); msg.subject = strSubject; msg.noteText = strBody; msg.recips = GetRecipients(out msg.recipCount); msg.files = GetAttachments(out msg.fileCount); m_lastError = MAPISendMail(new IntPtr(0), new IntPtr(0), msg, how, 0); if (m_lastError > 1) { //Handle the error if you want } Cleanup(ref msg); return m_lastError; }
public static extern int MAPISendMail(IntPtr lhSession, IntPtr ulUIParam, MapiMessage lpMessage, int flFlags, int ulReserved);
static extern int MAPISendMail(IntPtr sess, IntPtr hwnd, MapiMessage message, int flg, int rsv);
void Cleanup(ref MapiMessage msg) { int size = Marshal.SizeOf(typeof(MapiRecipDesc)); int ptr = 0; if (msg.recips != IntPtr.Zero) { ptr = (int)msg.recips; for (int i = 0; i < msg.recipCount; i++) { Marshal.DestroyStructure((IntPtr)ptr, typeof(MapiRecipDesc)); ptr += size; } Marshal.FreeHGlobal(msg.recips); } if (msg.files != IntPtr.Zero) { size = Marshal.SizeOf(typeof(MapiFileDesc)); ptr = (int)msg.files; for (int i = 0; i < msg.fileCount; i++) { Marshal.DestroyStructure((IntPtr)ptr, typeof(MapiFileDesc)); ptr += size; } Marshal.FreeHGlobal(msg.files); } m_recipients.Clear(); m_attachments.Clear(); m_lastError = 0; }