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

mu0hgdu0  于 2023-11-20  发布在  .NET
关注(0)|答案(3)|浏览(117)

我最近将我的ASP.Net网站从传统的Windows 2003共享服务器迁移到Azure作为Web应用程序。我的VBScript表单发送电子邮件给我已经停止工作,因为迁移。我已经尝试了几种不同的方法来让我的VBScript电子邮件代码工作,但到目前为止没有运气。部分问题是我看不到错误是什么。
我的问题的第一部分是:我如何使我的VBScript ASP页面上的ASP.Net错误可见?我已经在我的web.config中设置了debug='true',我试图在我的ASP页面上设置它(见下文),但这并不起作用。目前,我只是在尝试发送电子邮件后得到一个'内部错误500'页面,没有任何错误的指示。
下面是发送电子邮件的代码,似乎是问题的根源。我可以在不重写整个C#页面的情况下将其更改为在Azure下工作吗?

<%@ 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,因为这部分看起来运行得很好。

ycl3bljg

ycl3bljg1#

Azure云服务

As of 2023, Azure Cloud Services is now obsolete and will be discontinued shortly

假设您使用的是 *Azure云服务 * 的 *Web角色 *(并且不是Azure VM或 *Azure应用程序服务 *(以前称为 *Azure网站 *)),您可以使用经典ASP,前提是您需要跳过一些限制:https://khailiangtech.wordpress.com/2011/06/03/windows-azure-how-to-enable-classic-asp-support/
1.在Visual Studio中打开云服务解决方案
1.打开.csdef文件。
1.将此<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-可能可以通过<ServiceDefinition> XML安装Persits.MailSender组件-但我不建议这样做,因为32/64位的问题。
我建议您更改脚本以使用CDO,这里有一个参考:http://theholmesoffice.com/using-sendgrid-with-classic-asp-to-send-emails/(该页面用于使用SendGrid的SMTP服务器,但您可以使用任何SMTP服务器(只是不要使用端口25)。

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

According to the Azure Blog, Azure App Services does not support Classic ASP anymore, but it can work in a Docker-based application - based on this Docker template on GitHub
不幸的是,所涉及的代码量太长,无法发布到这个SO答案。

efzxgjgh

efzxgjgh2#

您正在尝试从未安装的DLL示例化对象:Server.CreateObject("Persits.MailSender")
使用Web Apps时,您无法安装任何外部COM对象。一个选项是使用虚拟机并安装COM DLL。

iqxoj9l9

iqxoj9l93#

为了将来的参考,我最终通过将代码转换为C#并使用to 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;
}

字符串

相关问题