SQL | Blog | Limilabs https://www.limilabs.com/blog Using Limilabs .net components Fri, 09 Sep 2016 08:35:13 +0000 en-US hourly 1 https://wordpress.org/?v=6.6.2 Download emails with SQLServer https://www.limilabs.com/blog/download-emails-with-sqlserver https://www.limilabs.com/blog/download-emails-with-sqlserver#comments Fri, 10 Sep 2010 14:17:46 +0000 http://www.limilabs.com/blog/?p=1106 In this blog post I’ll describe how to use Mail.dll .NET email component with SQL Server to download emails. First, you need to create a regular .NET assembly with definition of SQL stored procedure. Remember to add reference to Mail.dll. In this example the assembly name is SqlEmailDownloader.dll: The code above: connects to the IMAP […]

The post Download emails with SQLServer first appeared on Blog | Limilabs.

]]>
In this blog post I’ll describe how to use Mail.dll .NET email component with SQL Server to download emails.

First, you need to create a regular .NET assembly with definition of SQL stored procedure. Remember to add reference to Mail.dll.

In this example the assembly name is SqlEmailDownloader.dll:

// C#

using System.Data;
using Microsoft.SqlServer.Server;
using Limilabs.Client.IMAP;
using Limilabs.Mail;

public class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void GetEmails()
    {
        SqlDataRecord record = new SqlDataRecord(new[]
             {
                 new SqlMetaData("UID", SqlDbType.BigInt),
                 new SqlMetaData("Subject", SqlDbType.NVarChar, 128)
             });

        using (Imap client = new Imap())
        {
            client.Connect("server"); // or ConnectSSL
            client.UseBestLogin("user", "password");
            client.SelectInbox();

            SqlContext.Pipe.SendResultsStart(record);
            foreach (long uid in client.Search(Flag.Unseen))
            {
                var eml = client.PeekHeadersByUID(uid);
                IMail email = new MailBuilder().CreateFromEml(eml);

                record.SetSqlInt64(0, uid);
                record.SetSqlString(1, email.Subject);
                SqlContext.Pipe.SendResultsRow(record);
            }
            client.Close();
            SqlContext.Pipe.SendResultsEnd();
        }
    }
} ;

The code above:

  • connects to the IMAP server,
  • finds all unseen emails,
  • downloads headers and
  • passes the results to SQL server.

Here’s the VB.NET version:

' VB.NET

Imports System.Data
Imports Microsoft.SqlServer.Server
Imports Limilabs.Client.IMAP
Imports Limilabs.Mail

Public Class StoredProcedures
	<microsoft.SqlServer.Server.SqlProcedure> _
	Public Shared Sub GetEmails()
		Dim record As New SqlDataRecord(New () { _
			New SqlMetaData("UID", SqlDbType.BigInt), _
			New SqlMetaData("Subject", SqlDbType.NVarChar, 128)})

		Using client As New Imap()
			client.Connect("server") ' or ConnectSSL
			client.UseBestLogin("user", "password")
			client.SelectInbox()

			SqlContext.Pipe.SendResultsStart(record)
			For Each uid As Long In client.Search(Flag.Unseen)
				Dim eml = client.PeekHeadersByUID(uid)
				Dim email As IMail = New MailBuilder() _
					.CreateFromEml(eml)

				record.SetSqlInt64(0, uid)
				record.SetSqlString(1, email.Subject)
				SqlContext.Pipe.SendResultsRow(record)
			Next
			client.Close()
			SqlContext.Pipe.SendResultsEnd()
		End Using
	End Sub
End Class

In SQL Server Management Studio you need to execute following script (HelloWorld is a sample database):

USE HelloWorld
GO

EXEC sp_configure 'clr enabled' , '1'
GO
RECONFIGURE
GO

Alter Database HelloWorld Set TrustWorthy On
GO

CREATE ASSEMBLY [System.Windows.Forms] FROM 'C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll'
With Permission_Set=Unsafe
GO
CREATE ASSEMBLY SqlEmailDownloaderAssembly FROM 'D:\1\SqlEmailDownloader\bin\Debug\SqlEmailDownloader.dll'
With Permission_Set=Unsafe
GO

CREATE PROCEDURE GetEmails
AS EXTERNAL NAME SqlEmailDownloaderAssembly.StoredProcedures.GetEmails
GO

Finally you can execute the procedure:

EXEC GetEmails

…and see the results:

Click here to download Mail.dll IMAP component

The post Download emails with SQLServer first appeared on Blog | Limilabs.

]]>
https://www.limilabs.com/blog/download-emails-with-sqlserver/feed 10