Ejemplo n.º 1
0
		/// <summary>
		///
		/// </summary>
		/// <param name="strSubject"></param>
		/// <param name="strBody"></param>
		/// <param name="how"></param>
		/// <returns>true if successful</returns>
		bool 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)
//                MessageBox.Show("MAPISendMail failed! " + GetLastError(), "MAPISendMail");
			//todo if(m_lastError==25)
			//bad recipient
			var success = m_lastError == 0; // m_lastError gets reset by Cleanup()

			Cleanup(ref msg);
			return success;//NB: doesn't seem to cach user "denial" using outlook's warning dialog
		}
Ejemplo n.º 2
0
		void Cleanup(ref MapiMessage msg)
		{
			int size = Marshal.SizeOf(typeof(MapiRecipDesc));
			int ptr;

			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;
		}
Ejemplo n.º 3
0
		static extern int MAPISendMail(IntPtr sess, IntPtr hwnd, MapiMessage message, int flg, int rsv);
Ejemplo n.º 4
0
 static extern int MAPISendMail(IntPtr sess, IntPtr hwnd, MapiMessage message, int flg, int rsv);