我最近将我的 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,因为该部分看起来工作得很好。
注意:自 2023 年起,Azure 云服务现已过时,并将很快停止。
假设您使用的是 Azure 云服务的 Web 角色(且不是 Azure VM 或 Azure 应用服务(以前称为 Azure 网站)),您可以使用经典 ASP,前提是您跳转通过一些圈子:https://khailiangtech.wordpress.com/2011/06/03/windows-azure-how-to-enable-classic-asp-support/
在 Visual Studio 中打开您的云服务解决方案
打开您的
.csdef
文件。
将此
<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 应用服务不再支持经典 ASP,但它可以在基于 Docker 的应用程序中工作 - 基于 GitHub 上的 Docker 模板。
不幸的是,涉及的代码量太长,无法发布到这个SO答案。
您正在尝试从未安装的 DLL 实例化对象:
Server.CreateObject("Persits.MailSender")
使用 Web 应用程序时无法安装任何外部 COM 对象。一种选择是使用虚拟机并安装 COM DLL。
为了将来的参考,我最终通过将代码转换为 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;
}