Create a new email with c# and attach a file Outlook 2016
Solution 1
The fixed sample code should look like this:
var ol = new Outlook.Application();
Outlook.MailItem mail = ol.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem;
note that you need to declare the Outlook
alias with your using
statement:
using Outlook = Microsoft.Office.Interop.Outlook;
(as you already did) ... but must also remove
using Microsoft.Office.Interop.Outlook;
to avoid Visual Studio confusing your references.
The rest of the MSDN example should work as expected I don't have any other samples I can point you to, so your best bet is searching for Microsoft.Office.Interop.Outlook
or explore linked questions here.
Solution 2
use .Net class for that:
public static void CreateMessageWithAttachment(string server,string filePath)
{
// Specify the file to be attached and sent.
// This example assumes that a file named Data.xls exists in the
// current working directory.
string file = filePath;
// Create a message and set up the recipients.
MailMessage message = new MailMessage(
"[email protected]",
"[email protected]",
"Quarterly data report.",
"See the attached spreadsheet.");
// Create the file attachment for this e-mail message.
Attachment data = new Attachment(file, MediaTypeNames.Application.Octet);
// Add time stamp information for the file.
ContentDisposition disposition = data.ContentDisposition;
disposition.CreationDate = System.IO.File.GetCreationTime(file);
disposition.ModificationDate = System.IO.File.GetLastWriteTime(file);
disposition.ReadDate = System.IO.File.GetLastAccessTime(file);
// Add the file attachment to this e-mail message.
message.Attachments.Add(data);
//Send the message.
SmtpClient client = new SmtpClient(server);
// Add credentials if the SMTP server requires them.
client.Credentials = CredentialCache.DefaultNetworkCredentials;
try {
client.Send(message);
}
catch (Exception ex) {
Console.WriteLine("Exception caught in CreateMessageWithAttachment(): {0}",
ex.ToString() );
}
data.Dispose();
}
after that just iterate the list from loop and send it to the function
more example you can use https://www.codeproject.com/Tips/286952/create-a-simple-smtp-server-in-csharp
Jonas
Updated on June 27, 2022Comments
-
Jonas almost 2 years
I have a list of documents and email addresses.
I am trying to create a method I can use to iterate throw the list of emailAddresses and for each creates a new email I Outlook and attaches the corresponding document.
The Creating the MailItem is was I get stuck. Found a sample on MSDN that should work from Office 2013 and forward.
This is what I have so far:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.Office.Interop.Outlook; namespace Test_Invoice { class SendviaMail { string demofile = @"C:\Desktop\test-inv\1_Test Testesen_1_010.pdf"; public void Send() { MailItem eMail = new MailItem(); eMail.Subject = "Here is Your Invoice"; eMail.To = "[email protected]"; eMail.Body = "Dette er en test mail for TestMailApp"; } public void Send(string email, string filename) { } } }
I've been trying to understand the documentation on MSDN and read thru a few posts on here.
As far as I can figure out, the next step is to add the attachment (the demo file) If I understand it right I need something like
eMail.AttachmentAdd = demofile;
But that does not work.
It might be me that does not understand the library correctly. Looking at this sample from MSDN https://msdn.microsoft.com/en-us/library/bb644320.aspx
Results in this code:
using Microsoft.Office.Interop.Outlook; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Outlook = Microsoft.Office.Interop.Outlook; namespace Test_Invoice { class SendviaMail { string demofile = @"C:\Desktop\test-inv\1_Test Testesen_1_010.pdf"; public void Send() { Outlook.MailItem mail = Application.CreateItem(Outlook.OlItemType.olMailItem) as Outlook.MailItem; mail.Subject = "Quarterly Sales Report FY06 Q4"; //MailItem eMail = new MailItem(); //eMail.Subject = "tilmelding og faktura"; //eMail.To = "[email protected]"; //eMail.Body = "Dette er en test mail for TestMailApp"; //eMail.AttachmentAdd } public void Send(string email, string filename) { } } }
-
Jonas almost 7 yearswill this use the current users email profile in windows? its a wpf application and needs to use the current users outlook to generate the email.
-
Leon Barkan almost 7 yearsif you have smpt server on the pc you need to send in to the function or just initialize it hardcoded in the function
-
Jonas almost 7 yearsNice example. But it seams to me that we are overcomplicating things by writing an SMTP Server into the application to be able to send the email. as Filburt surgested above the other method by using Outlook seams to be well documented and there are lots of posts and samples on it. But I seam to be missing some part of the puzzle.
-
Filburt almost 7 years@Jonas There is no programming overhead involved sending the message via smtp - however it can be difficult to convince your administrators to allow smtp relay for every user. Also if your requirement is, to have your mail item tracked in your Exchange account, the quoted example is the way to go.
-
Jonas almost 7 yearsFound this reference and sample for using the Application or getting the active process msdn.microsoft.com/en-us/library/office/ff462097.aspx
-
Suncat2000 about 5 yearsThis will submit the email to an SMTP server from the application host. The original poster asked to create a new email with attachment for sending from Outlook 2016. It's a useful alternative, but doesn't answer the question.