SmtpMail.AddAttachment Method


Attaches a file attachment from binary data array to the email message.

[Visual Basic]
Public Sub AddAttachment( _
    fileName As String, _
    content() As Byte _
) As Attachment
[C#]
public Attachment AddAttachment(
    string fileName,
    byte[] content
);
[C++]
public: Attachment^ AddAttachment(
    String^ fileName,
    array<unsigned char>^ content,
);
public function AddAttachment( 
    fileName : String,
    content : Byte[]
) : Attachment;

Parameters

fileName
A full file name or URL.
content
The binary data of the file.

Return Value

The Attachment class instance.

Remarks

To attach an embedded images to email, you should add an attachment to email at first. Then you should assign an unique identifier(contentid) to this attachment. Finally, you need to replace the <img src="your file name" /> to <img src="cid:yourcontentid" />.
To attach embedded images or pictures, SmtpMail.ImportHtmlBodyAsync and SmtpMail.ImportHtmlAsyncAsync methods are strongly recommended. You can also use the following sample code to attach an embedded picture manually.

Example

[Visual Basic, C#, JavaScript] To get the full samples of EASendMail, please refer to Samples section.

[C# - Send Email with Attachment from Windows Store Apps - XAML]
using EASendMail;
using System.Threading.Tasks;

private async Task SendEmail()
{
    String Result = "";
    try
    {
        SmtpMail oMail = new SmtpMail("TryIt");
        SmtpClient oSmtp = new SmtpClient();

        // Set sender email address, please change it to yours 
        oMail.From = new MailAddress("test@emailarchitect.net");

        // Add recipient email address, please change it to yours
        oMail.To.Add(new MailAddress("support@emailarchitect.net"));

        // Set email subject and text body
        oMail.Subject = "test email from C# XAML project";
        oMail.TextBody = "this is a test email with Attachment sent from Windows Store App, do not reply";

        // Get eml file from your current application folder
        StorageFile f =
            await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///assets/logo.png"));

        var buffer = await FileIO.ReadBufferAsync(f);
        Windows.Storage.Streams.DataReader reader = Windows.Storage.Streams.DataReader.FromBuffer(buffer);

        byte[] data = new byte[buffer.Length];
        reader.ReadBytes(data);
        reader.Dispose();
        Attachment oAttachment = oMail.AddAttachment("logo.png", data);

        // you can change the Attachment name by
        // oAttachment.Name = "mytest.png";

        // If you want to send email with embedded image
        // Specifies the attachment as an embedded image
        // string contentID = "test001@host";
        // oAttachment.ContentID = contentID;
        // oMail.HtmlBody = "<html><body>this is an <img src=\"cid:" + contentID + "\"> embedded picture.</body></html>";        
        
        // Your SMTP server address
        SmtpServer oServer = new SmtpServer("smtp.emailarchitect.net");

        // User and password for ESMTP authentication            
        oServer.User = "test@emailarchitect.net";
        oServer.Password = "testpassword";

        // If your SMTP server requires TLS connection on 25 port, please add this line
        // oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;

        // If your SMTP server requires SSL connection on 465 port, please add this line
        // oServer.Port = 465;
        // oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;

        await oSmtp.SendMailAsync(oServer, oMail);
        Result = "Email was sent successfully!";
    }
    catch (Exception ep)
    {
        Result = String.Format("Failed to send email with the following error: {0}", ep.Message);
    }

    // Display Result by Diaglog box
    Windows.UI.Popups.MessageDialog dlg = new
        Windows.UI.Popups.MessageDialog(Result);
           
    await dlg.ShowAsync();
}

[VB - Send Email with Attachment from Windows Store Apps - XAML]
Imports EASendMail

Private Async Function SendEmail() As Task
    Dim Result As String = ""
    Try

        Dim oMail As New SmtpMail("TryIt")
        Dim oSmtp As New SmtpClient()

        ' Set sender email address, please change it to yours
        oMail.From = New MailAddress("test@emailarchitect.net")

        ' Add recipient email address, please change it to yours
        oMail.To.Add(New MailAddress("support@emailarchitect.net"))

       ' Set email subject and text body
        oMail.Subject = "test email from VB XAML project"
        oMail.TextBody = "this is a test email with attachment sent from Windows Store App, do not reply"

        ' Get eml file from your current application folder
        Dim f As StorageFile =
                Await StorageFile.GetFileFromApplicationUriAsync(New Uri("ms-appx:///assets/logo.png"))

        Dim buffer = Await FileIO.ReadBufferAsync(f)
        Dim reader = Windows.Storage.Streams.DataReader.FromBuffer(Buffer)

        Dim data(Buffer.length - 1) As Byte
        reader.ReadBytes(data)
        reader.Dispose()
        Dim oAttachment As Attachment = oMail.AddAttachment("logo.png", data)

        ' you can change the Attachment name by
        ' oAttachment.Name = "mytest.png"

        ' If you want to send email with embedded image
        ' Specifies the attachment as an embedded image
        ' Dim contentID As String = "test001@host"
        ' oAttachment.ContentID = contentID
        ' oMail.HtmlBody = "<html><body>this is an <img src=""cid:" + contentID + """> embedded picture.</body></html>"        
        
        ' Your SMTP server address
        Dim oServer As New SmtpServer("smtp.emailarchitect.net")

        ' User and password for ESMTP authentication            
        oServer.User = "test@emailarchitect.net"
        oServer.Password = "testpassword"

        ' If your SMTP server requires TLS connection on 25 port, please add this line
        ' oServer.ConnectType = SmtpConnectType.ConnectSSLAuto

        ' If your SMTP server requires SSL connection on 465 port, please add this line
        ' oServer.Port = 465
        ' oServer.ConnectType = SmtpConnectType.ConnectSSLAuto

        Await oSmtp.SendMailAsync(oServer, oMail)
        Result = "Email was sent successfully!"

    Catch ep As Exception
        Result = String.Format("Failed to send email with the following error: {0}", ep.Message)
    End Try

    ' Display Result by Diaglog box
    Dim dlg As New Windows.UI.Popups.MessageDialog(Result)
    Await dlg.ShowAsync()
End Function

[JavaScript - Send Email with Attachment from Windows Store Apps - HTML5]
function send_email_attachments()
{
    var result = "";
    var oMail = new EASendMail.SmtpMail("TryIt");

    // Set sender email address, please change it to yours
    oMail.from = new EASendMail.MailAddress("test@emailarchitect.net");

    // Add recipient email address, please change it to yours
    oMail.to.append(new EASendMail.MailAddress("support@emailarchitect.net"));

    // Set email subject and text body
    oMail.subject = "test email from JavaScript HTML5 project";
    oMail.textBody = "this is a test email with attachment sent from Windows Store Apps, do not reply";

    // Your SMTP server address
    var oServer = new EASendMail.SmtpServer("smtp.emailarchitect.net");

    // User and password for ESMTP authentication         
    oServer.user = "test@emailarchitect.net";
    oServer.password = "testpassword";

    // If your SMTP server requires TLS connection on 25 port, please add this line
    // oServer.connectType = EASendMail.SmtpConnectType.connectSSLAuto;

    // If your SMTP server requires SSL connection on 465 port, please add this line
    // oServer.port = 465;
    // oServer.connectType = EASendMail.SmtpConnectType.connectSSLAuto;

    var oSmtp = new EASendMail.SmtpClient();
        
    // Get attachment file from your current application folder
    Windows.Storage.StorageFile.getFileFromApplicationUriAsync(
        new Windows.Foundation.Uri("ms-appx:///images/logo.png"))
    .then(function (f) {
        return Windows.Storage.FileIO.readBufferAsync(f);
    })
    .then(function (buffer) {
        var reader = Windows.Storage.Streams.DataReader.fromBuffer(buffer);
        var data = new Array(buffer.length);
        reader.readBytes(data);
        reader.close();
            
        var oAttachment = oMail.addAttachment("logo.png", data);
        // you can change the file name like this
        // oAttachment.name = "mytest.png";

        // If you want to send email with embedded image
        // Specifies the attachment as an embedded image
        //  var contentID = "test001@host";
        // oAttachment.contentID = contentID;
        // oMail.htmlBody = "<html><body>this is an <img src=\"cid:" + contentID + "\"> embedded picture.</body></html>";

        return oSmtp.sendMailAsync( oServer, oMail )

    })
    .done(function () {
        result = "Email was sent successfully!";
        (new Windows.UI.Popups.MessageDialog(result, "Success")).showAsync();
    },
    // error handler
    function (e) {
        // because javascript exception only gives the stack trace messages, but it is not
        // real description of exception, so we give a property lastErrorMessage for javascript.
        if (oMail.lastErrorMessage != "") {
            result = oMail.lastErrorMessage;
        }
        else if (oSmtp.lastErrorMessage != "") {
            result = oSmtp.lastErrorMessage;
        }
        else {
            result = e.message;
        }

        (new Windows.UI.Popups.MessageDialog(result, "Error Information")).showAsync();
    });

}

See Also

SmtpMail.AddAttachmentAsync Method
SmtpMail.ImportHtmlBodyAsync Method
SmtpMail.ImportHtmlAsync Method
Attachment Class