如何让旧的 VBScript ASP sendemail 在 Azure 上工作?

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

我最近将我的 ASP.Net 网站从传统的 Windows 2003 共享服务器迁移到 Azure 作为 Web 应用程序。自迁移以来,用于向我发送电子邮件的 VBScript 表单已停止工作。我尝试了几种不同的方法来让我的 VBScript 电子邮件代码正常工作,但到目前为止还没有成功。部分问题是我看不到错误是什么。

我的问题的第一部分是:如何使 VBScript ASP 页面上的 ASP.Net 错误可见?我在 web.config 中设置了 debug='true' 并尝试在 ASP 页面上设置它(见下文),但这没有起作用。目前,在尝试发送电子邮件后,我只是收到“内部错误 500”页面,没有任何迹象表明出了什么问题。

这是发送电子邮件的代码,似乎是问题的根源。我是否可以将其更改为在 Azure 下工作,而无需用 C# 重写整个页面?

<%@ Language=VBScript Debug='true' %>  'Debug=true doesn't work

Set Mailer = Server.CreateObject("Persits.MailSender")
Mailer.Host = "mail.mydomain.com" ' Specify a valid SMTP server
Mailer.From = Request.Form("AgentEmail") ' Specify sender's address
Mailer.FromName = Request.Form("AgentsName") ' Specify sender's name
Mailer.Port = 587
Mailer.isHTML = True

Mailer.AddAddress "[email protected]"
Mailer.AddAddress "[email protected]"
Mailer.AddAddress "[email protected]"
Mailer.AddAddress Request.Form("AgentEmail")
Mailer.Body = "stuff in my email"


Mailer.Username = "me@emailcom"
Mailer.Password = "123456"
On Error Resume Next
Mailer.Send
If Err <> 0 Then
   Response.Write "Error encountered: " & Err.Description
Else
   Response.Write "Success"
End If

这段代码确实可以在我的旧 Windows 服务器上运行。我省略了所有 HTML,因为该部分看起来工作得很好。

asp.net email azure vbscript
3个回答
2
投票

对于 Azure 云服务

注意自 2023 年起,Azure 云服务现已过时,并将很快停止

假设您使用的是 Azure 云服务Web 角色(且不是 Azure VMAzure 应用服务(以前称为 Azure 网站)),您可以使用经典 ASP,前提是您跳转通过一些圈子:https://khailiangtech.wordpress.com/2011/06/03/windows-azure-how-to-enable-classic-asp-support/

  1. 在 Visual Studio 中打开您的云服务解决方案

  2. 打开您的

    .csdef
    文件。

  3. 将此

    <WebRole><Startup><Task>
    元素添加到您的 XML 中:

    <ServiceDefinition>
        <!-- etc -->
        <WebRole>
            <!-- etc -->
            <Startup>
                <!-- etc -->
                <Task commandLine="start /w pkgmgr /iu:IIS-ASP" executionContext="elevated" taskType="simple" />
            </Startup>
            <!-- etc -->
         </WebRole>
        <!-- etc -->
    <ServiceDefinition>
    

Windows Azure 似乎支持 CDO(内置 COM SMTP 服务),而您的代码使用

Persits.MailSender
- 可能可以通过
Persits.MailSender
XML 安装
<ServiceDefinition>
组件 - 但我不建议这样做因为32/64位的问题。

我建议更改您的脚本以使用 CDO,这里有一个参考:http://theholmesoffice.com/using-sendgrid-with-classic-asp-to-send-emails/(该页面用于使用 SendGrid 的 SMTP 服务器,但您可以使用任何 SMTP 服务器(只是不要使用端口 25)。

对于 Azure 应用服务(Azure 网站)

根据 Azure 博客,Azure 应用服务不再支持经典 ASP,但它可以在基于 Docker 的应用程序中工作 - 基于 GitHub 上的 Docker 模板

不幸的是,涉及的代码量太长,无法发布到这个SO答案。


1
投票

您正在尝试从未安装的 DLL 实例化对象:

Server.CreateObject("Persits.MailSender")

使用 Web 应用程序时无法安装任何外部 COM 对象。一种选择是使用虚拟机并安装 COM DLL。


-2
投票

为了将来的参考,我最终通过将代码转换为 C# 并使用 smtpClient 来解决我的问题。这是这里的总体想法:

SmtpClient smtpClient = new SmtpClient("mail.domain.com", 587);
smtpClient.UseDefaultCredentials = false;
smtpClient.Credentials = new System.Net.NetworkCredential(From, "password");
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
smtpClient.Port = 587;
MailMessage message = new MailMessage();

try
{
    MailAddress fromAddress = new MailAddress(From, "Me");

    smtpClient.Host = "mail.domain.com";

    message.From = fromAddress;
    message.To.Add(To);
    message.Subject = Subject;
    message.IsBodyHtml = true;
    message.Body = Body;

    smtpClient.Send(message);
    Label_Results.Text = "Email successfully sent.";
}
catch (Exception ex)
{
    ErrorLabel.Text = "<p>Send Email Failed:<p>" + ex.Message;
}
© www.soinside.com 2019 - 2024. All rights reserved.