C#程序发送Outlook邮件时自动添加邮件签名的实现方法

使用Visual studio的C#程序创建Outlook邮件,为了让邮件能自动添加邮件签名,笔者查阅了大量的资料和网站,给出的答案大多是在程序中硬输入HTML格式的签名内容。这样的程序非常的死板,不同的电脑运行这个程序,就需要写上不同的签名内容的程序。笔者发现Access程序中有非常灵活的邮件签名自动添加方法。于是笔者突发奇想,是否可以把Access中创建Outlook邮件并自动添加邮件签名的方法嵌入C#程序中?

经过不断地尝试,笔者实现了把Access创建和发送邮件的功能嵌入C#程序中的方法。现在把实现过程整理出来,供有兴趣的伙伴参考。实现上述方法需要做以下几点工作。

  1. 在Visual Studio中连接Access,需要添加OLEDB的引用。如果Access是2007以前的版本,需要用到Microsoft Jet Oledb.4.0引擎,如果是2007以上版本且是64位的Access,需要用到Microsoft ACE.Oledb.12.0引擎。笔者在连接后者Access的时候,遇到了一个问题,虽然添加了OLE Automation 2.0的引用,但是C#程序就是无法打开与accdb格式的Access的连接。已经准备做好放弃使用2007以上版本的Access作为连接对象,而改连接mdb格式的老版Access。后来经朋友提醒,经Visual Studio 菜单区的Solution Platforms选项卡选择x64,终于实现了用Microsoft ACE.Oledb.12.0引擎连接accdb格式的Access。在这里插入图片描述

  2. 需要实现C#程序对Access数据表的访问与编辑。把C#程序中的邮件接受者,主题,正文等数据写入Access的数据表中,以备Access运行创建和发送邮件时加载使用。另外,还需实现C#代码对指定Access文件的启动。如何实现C#对Access的访问,CSDN上有很多人都分享了方法,笔者也是将别人分享的方法借鉴了过来使用。
    代码粘贴如下:
    OleDbConnection conn = null;
    //string fileName = “C:\temp\test_sendmail_c.mdb”;
    string fileName = “C:\temp\test_sendmail_b.accdb”;
    //连接本地ACCESS数据库
    //string sAccessConnection= @"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = " + fileName;
    string sAccessConnection = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + fileName;
    conn = new OleDbConnection(sAccessConnection);
    try
    {
    conn.Open();//打开连接
    OleDbCommand cmd = conn.CreateCommand();//建立SQL查询
    //输入查询语句
    string sqlCmd = “UPDATE tbl_MailInfo SET Recipients=‘Jason.zhang@sina.com’ WHERE ID=1”;//字符串前加上符号$
    cmd.CommandText = sqlCmd;
    cmd.ExecuteNonQuery();
    }
    catch (Exception ex)
    {
    Console.WriteLine($“write err:{ex.Message}”);
    }
    finally
    {
    conn.Close();
    }
    //运行Access
    Application accessApp = new Application();
    accessApp.Visible = false; // 如果需要查看 Access 界面赋值true
    accessApp.OpenCurrentDatabase(“c:\temp\test_sendmail_b.accdb”, //这个数据库打开时自动加载frm_test窗体,frm_test窗体加载事件运行发邮件的过程代码。
    true //Exclusive
    );

         accessApp.Quit();
    
         // 释放 COM 对象  
         ReleaseObject(accessApp);
    
     }
     private static void ReleaseObject(object obj)
     {
         try
         {
             System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
             obj = null;
         }
         catch (Exception ex)
         {
             obj = null;
             Console.WriteLine("Exception Occurred while releasing object " + ex.ToString());
         }
         finally
         {
             GC.Collect();
         }
     }
    

3.Access中创建用于接收收件人、主题、正文等信息的数据表tbl_MailInfo,并编写创建和发送邮件的代码。Access中的代码是事件驱动的,原本希望通过C#代码来实现启动Access中宏过程,但是把网上搜索过来的方法试用后发现,这个方法行不通。最后,通过设置Access的启动窗体,让这个窗体的加载事件来调用Access模块中的SendMail过程代码,这个方法实现了自动运行创建和发送邮件。Access中的代码如下:

Public Sub SendMail()
'工具->引用->Microsoft Outlook 16.0 Object Library
Dim outMail As Outlook.Application
Set outMail = New Outlook.Application
Dim objMail As Outlook.MailItem
Set objMail = outMail.CreateItem(olMailItem)
Dim strBody As String
Dim mailAdd As String
Dim strSignature As String
Dim strAddr As String
Dim strBodyText As String
Dim strBodyTitle As String
Dim n As Integer
strAddr = DLookup(“Recipients”, “tbl_MailInfo”, “ID=1”)
strBodyText = " " & DLookup(“MailBody”, “tbl_MailInfo”, “ID=1”)
n = InStr(1, strAddr, “.”) - 1
strBodyTitle = "Hi " & Left(strAddr, n) & “,” & vbCrLf
strBody = strBodyTitle & strBodyText
mailAdd = strAddr
With objMail
.Display
strSignature = .HTMLBody
.Subject = “通知” '主题
.To = mailAdd '收件人
.Body = strBody '内容
.HTMLBody = .HTMLBody & vbCrLf & strSignature
.Send '执行发送
End With
'MsgBox “邮件已经发送”
End Sub

笔者已经实测过这个让C#借道Access发邮件,从而可以实现自动添加邮件签名的方法。

在VBA (Visual Basic for Applications) 中,你可以使用Microsoft Office的Outlook API 来获取邮件信息。以下是一个简单的步骤和示例,用于从Outlook邮箱获取邮件: 1. **引用库**:首先,你需要在VBA编辑器中引用`Outlook`库,这可以在VBA编辑窗口底部完成,通过`Tools > References`,找到并选中`Microsoft Outlook XX.X Object Library`。 2. **创建Application对象**:声明一个`Application`对象,这是访问Outlook的基础。 ```vba Dim olApp As Outlook.Application Set olApp = New Outlook.Application ``` 3. **打开Outlook**:如果程序尚未运行,需要启动Outlook进程。 ```vba olApp.Visible = True ' 显示Outlook窗口(可选) ``` 4. **获取收件箱**:然后,我们创建一个`Namespace`对象,并从中获取`MAPIFolder`对象,代表你的收件箱。 ```vba Dim ns As Outlook.Namespace Dim inbox As Outlook.MAPIFolder Set ns = olApp.GetNamespace("MAPI") Set inbox = ns.GetDefaultFolder(olFolderInbox) ``` 5. **遍历邮件**:使用`Items`属性获取邮件集,然后迭代获取每封邮件的信息,如发件人、主题等。 ```vba Dim mail As Outlook.MailItem For Each mail In inbox.Items Dim fromAddress As String fromAddress = mail.SenderEmailAddress Dim subject As String subject = mail.Subject ' 这里可以添加更多的邮件属性获取 Debug.Print "From: " & fromAddress & ", Subject: " & subject Next mail ``` 6. **清理**:完成后,记得释放资源。 ```vba Set mail = Nothing Set inbox = Nothing Set ns = Nothing Set olApp = Nothing ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值