无法通过C# COM通过Delphi 7客户端发送电子邮件

问题描述 投票:0回答:1

我有一个 COM 库,正在通过 Delphi 7 应用程序使用它来发送电子邮件。

当从 Visual Studio 控制台应用程序使用 COM 对象时,它可以工作。

但是,当使用 Delphi 7 应用程序调用它时,我收到错误

发送邮件失败
无法连接到远程服务器

请帮忙,花了我一天的大部分时间。

C 升值代码

public string SendEmail(string MySubject, string MyRecepient, string MyMessage, string CC = "", string AttachFile = "")
{
    using (var db = new HRContext())
    {
        CSSetup MySetup = db.CSSetup.FirstOrDefault();
        CSSecurity SecurityManager = new CSSecurity();
        ServicePointManager.SecurityProtocol = (SecurityProtocolType)(0xc00 | 0X3000);

        var MyResult = "";

        SmtpClient client = new SmtpClient();
        client.Port = MySetup.PortNo;
        client.Host = MySetup.EmailHost;
        client.EnableSsl = CSCommon.CSSetBoolean(MySetup.UseSSL);
        client.DeliveryMethod = SmtpDeliveryMethod.Network;
        client.Timeout = 45000;
        client.UseDefaultCredentials = true;
        client.Credentials = new NetworkCredential(MySetup.EmailUser, SecurityManager.Decrypt(MySetup.EmailPass));

        MailMessage MyEmail = new MailMessage();
        MyEmail.From = new MailAddress(MySetup.EmailUser);
        MyEmail.To.Add(new MailAddress(MyRecepient));
        MyEmail.Subject = MySubject;
        MyEmail.Body = "<div style='font-family: tahoma; font-size: 10pt; display: block'>" + MyMessage + "</div>";
        MyEmail.BodyEncoding = UTF8Encoding.UTF8;
        MyEmail.IsBodyHtml = true;

        //Copy To - Optional
        if (CC != "" && MySetup.SendCC == 1)
        {
            MyEmail.To.Add(CC);
        }

        //Attachment - Optional
        if (AttachFile != "")
        {
            MyEmail.Attachments.Add(new Attachment(AttachFile));
        }

        try
        {
            client.Send(MyEmail);
        }
        catch (Exception ex)
        {
            MyResult = ex.Message;
            if (ex.InnerException != null)
            {
                MyResult = MyResult + "\n" + ex.InnerException.Message;
                MyResult = MyResult + "\n" + "Host: " + client.Host.ToUpper();
                MyResult = MyResult + "\n" + "Port: " + client.Port.ToString();
            }
        }
                
        return MyResult;
    }
}

Delphi调用代码

//--- Send Email                      
SampleData := EmailManager.SendEmail(ESubject, EAddress, EMessage, TempSetup.EmailUser, FPDF.FileName);
ShowMessage(SampleData);
c# delphi-7
1个回答
0
投票

我已经求助于创建一个控制台应用程序,该应用程序使用 ShellExecute 从 Delphi 7 调用,并传递上面显示的 SendEmail 方法所需的参数。

© www.soinside.com 2019 - 2024. All rights reserved.