簡體   English   中英

如何使用 CDO.Message 在經典 ASP 中從 Windows Docker Z5DA5ACF461B4EFB7E7ZEC801916 發送 email

[英]How to use CDO.Message to send email in Classic ASP from Windows Docker IIS 2019

我的團隊的任務是將經典 ASP 應用程序從 Windows 2008 服務器遷移到 Docker 容器 ( mcr.microsoft.com/windows/servercore/iis:windowsservercore-ltsc2019 ),代碼更改盡可能少。 應用程序使用Server.CreateObject("CDO.Message")發送 email。

但是,該行會導致以下錯誤: 006~ASP 0177~Server.CreateObject Failed~800401f3/ 我從這個線程中了解到,這是因為這個 Windows Docker 圖像中缺少 cdosys.dll 文件。

通常,Windows Docker 圖像中似乎不存在 cdosys.dll 文件。 我嘗試只安裝大量 windows 功能(所有可用的 .NET),但它們似乎都不包含此文件。 一名團隊成員也嘗試手動注冊 dll,但未成功。

如何使用 CDO.Message 從我的 Windows Docker 容器發送 email?

制作實現 CDO.MESSAGE API 的包裝器 class。

我們圍繞 System.Net.Mail

using System.Net.Mail;
using System.Runtime.InteropServices;

namespace AspClassicMail
{
    [System.Runtime.InteropServices.ComVisible(true)]
    [ProgId("AspClassicMail.Message")]
    public class Message
    {
        private MailMessage mailMessage;

        public string To {
            get
            {
                return mailMessage.To.ToString(); 
            }
            set {
                mailMessage.To.Clear();
                mailMessage.To.Add(value.Replace(';', ','));
            }
        }

        public string Subject {
            get
            {
                return mailMessage.Subject;
            }
            set
            {
                mailMessage.Subject = value;
            }
        }

        public string CC
        {
            get
            {
                return mailMessage.CC.ToString(); 
            }
            set
            {
                mailMessage.CC.Clear();
                mailMessage.CC.Add(value.Replace(';', ','));
            }
        }

        public string Bcc
        {
            get
            {
                return mailMessage.Bcc.ToString();
            }
            set
            {
                mailMessage.Bcc.Clear();
                mailMessage.Bcc.Add(value.Replace(';', ','));
            }
        }

        public string From
        {
            get
            {
                return mailMessage.From.Address;
            }
            set
            {
                mailMessage.From = new MailAddress(value);
            }
        }

        public string ReplyTo
        {
            get
            {
                return mailMessage.ReplyToList.ToString();
            }
            set
            {
                mailMessage.ReplyToList.Clear();
                mailMessage.ReplyToList.Add(value.Replace(';',','));
            }
        }

        public string textbody
        {
            get
            {
                return mailMessage.Body;
            }
            set
            {
                mailMessage.IsBodyHtml = false;
                mailMessage.Body = value;
            }
        }

        public string HTMLBody
        {
            get
            {
                return mailMessage.Body;
            }
            set
            {
                mailMessage.IsBodyHtml = true;
                mailMessage.Body = value;
            }
        }

        public Message()
        {
            mailMessage = new MailMessage();
        }

        public void send()
        {
            SmtpClient smtpClient = new SmtpClient("YOUR MAIL SERVER");
            smtpClient.Send(mailMessage);
        }
    }
}

您可能還需要包含“配置”的屬性。 我們只是從 ASP 文件中刪除了配置。

You can either place it in an MSI package and set the DLL class to Register "vsdrpCOM" or run RegAsm.exe from your .NET framework folder.

只需更新 ASP Classic 代碼即可將Server.CreateObject("CDO.Message")替換為Server.CreateObject("AspClassicMail.Message")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM