예제 #1
0
        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;
        }
예제 #2
0
        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;
        }
예제 #3
0
 public static extern int MAPISendMail(IntPtr lhSession, IntPtr ulUIParam,
     MapiMessage lpMessage, int flFlags, int ulReserved);
예제 #4
0
 static extern int MAPISendMail(IntPtr sess, IntPtr hwnd,
                                MapiMessage message, int flg, int rsv);
예제 #5
0
 static extern int MAPISendMail(IntPtr sess, IntPtr hwnd,
     MapiMessage message, int flg, int rsv);
예제 #6
0
        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;
        }