【问题标题】:How to send an HTML form in asp.net c# by email?如何通过电子邮件在 asp.net c# 中发送 HTML 表单?
【发布时间】:2013-02-22 05:43:12
【问题描述】:

在我的 ASP.Net C# 网站中,我有一个订单表格,我想通过提交它通过电子邮件发送。表单元素是 HTML,在客户端通过 JavaScript 完成计算,表单元素很多。

我希望能够由用户以 PDF 或 JPG 格式通过电子邮件发送表单及其填写的内容。

也许应该从客户端将表单捕获为图像或打印文件的快照,然后可以通过电子邮件从服务器端发送文件。

如果您能给我一个实用的描述解决方案,我将不胜感激。以下是部分代码示例:

   <div id="cblDomain">
    <input id="cblDomain_1" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain" checked="checked"><label for="cblDomain_1">com - 10</label><br>
    <input id="cblDomain_2" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_2">net - 10</label><br>
    <input id="cblDomain_3" value="5" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_3">info - 5</label><br>
    <input id="cblDomain_4" value="10" onchange="subsumDomain()" type="checkbox" name="cblDomain"><label for="cblDomain_4">me - 10</label>
   </div>

<select name="ddlDomainPeriod" onchange="subsumDomain()" id="ddlDomainPeriod">
    <option value="1">1 yr</option>
    <option value="2">2 yrs</option>
    <option value="3">3 yrs</option>
    <option value="4">4 yrs</option>
    <option value="5">5 yrs</option>
</select>
 <div name="sum" id="sumDomain">10</div>

<script type="text/javascript">
    function subsumDomain() {
        var _sum = 0;
        var _cblDomain = document.getElementsByName('cblDomain');
        for (i = 0; i < _cblDomain.length; i++) {
            if (_cblDomain[i].checked == true)
                _sum += Number(_cblDomain[i].value);
        }
        var _domainPeriod = Number(document.getElementById('ddlDomainPeriod').options[document.getElementById('ddlDomainPeriod').selectedIndex].value);
        document.getElementById('sumDomain').innerHTML = moneyConvert(_sum * _domainPeriod);

        subTotal();
    }

    function subsumHost() {
        var _hostPrice = Number(document.getElementById('ddlHost').options[document.getElementById('ddlHost').selectedIndex].value);
        var _hostPeriod = Number(document.getElementById('ddlHostPeriod').options[document.getElementById('ddlHostPeriod').selectedIndex].value);
        _hostDiscount = 0;
        if (_hostPeriod > 1)
            _hostDiscount = (_hostPrice * _hostPeriod) * 0.2;
        document.getElementById('sumHost').innerHTML = moneyConvert((_hostPrice * _hostPeriod) - _hostDiscount);

        subTotal();
    }
</script>

任何帮助将不胜感激 (^_^)

卡多

【问题讨论】:

    标签: c# javascript asp.net pdf snapshot


    【解决方案1】:

    听起来是一个漫长的过程。提交、转换为 pdf、保存到硬盘、附加到电子邮件、发送电子邮件。你可以这样做,但我会考虑发送 HTML 电子邮件。您只需将数据(订单)存储在您的数据库中,然后在预先形成的电子邮件模板上发送电子邮件。让最终用户将其打印到 pdf 或纸张等...

    如果你真的想做 pdf 的事情,你需要像已经建议的那样找到一个像样的库。

    这就是您发送电子邮件的方式。我喜欢创建一个可重复使用的电子邮件类。如果那不适合您的需求,您不必这样做。但是,嘿,如果你要创建一个电子邮件,为什么不把它变成一个对象呢?

    using System.Net.Mail;
    public class Email
        {
    
            public MailAddress From { get; set; }
            public MailAddress To { get; set; }
            public string Password { get; set; }
            public string Subject { get; set; }
            public string Body { get; set; }
            public string Host { get; set; }
            public int Port { get; set;}
            public List<Attachment> attachmentsList = new List<Attachment>();
    
    
            public void send()
            {
                //send email
                var smtp = new SmtpClient
                {
                    Host = Host,
                    Port = Port,
                    EnableSsl = true,
                    DeliveryMethod = SmtpDeliveryMethod.Network,
                    Credentials = new NetworkCredential(From.Address, Password),
                    Timeout = 120000 //2mins
                };
    
                MailMessage message = new MailMessage(From.Address, To.Address);
                message.Subject = Subject;
                message.Body = Body;
                message.IsBodyHtml = true;
    
                foreach(Attachment attachment in attachmentsList){
                    if (attachment != null)
                    {
                        message.Attachments.Add(attachment);
                    }                
                }
    
                try
                {
                    smtp.Send(message);
                }
                catch(Exception e){
    
                    throw e;
                }
            }
        }
    

    然后您需要创建 pdf 或您选择的任何内容。将其保存到您的硬盘驱动器的某个地方。创建您的电子邮件并将文件作为电子邮件附件附加(或仅发送 html 正文。使用 stringReplace() 替换电子邮件模板中的值。(#price #address #companyname 等)。

    Email newMail = new Email();
    
    newMail.From = new MailAddress("someone@somewhere.com", "Your Name");
    newMail.Password = "your outgoing mail password");
    newMail.To = new MailAddress("someone@somewhere.com", "Recipient Name");
    newMail.Subject = "Your Subject";
    newMail.Body = "Your email body";
    newMail.Host = smtp.example.com;
    newMail.Port = 123;
    
    //add the attachments (example)
     foreach (string fileLocation in AttachmentsList)
     {
     newMail.attachmentsList.Add(new Attachment(fileLocation));
     }
    
     newMail.send();
    

    我希望在某种程度上有所帮助......

    【讨论】:

    • 感谢您的回答 :) 这并不完全符合我的预期,但这是非常好的和易于使用的电子邮件解决方案。
    【解决方案2】:

    如果您想获取 html 表单并生成 PDF,我最喜欢的工具是 wkhtmltopdf。不过,您必须在您的服务器上安装它(我很想知道其他人是否找到了 wkhtmltopdf 的 .net 库!:])。

    一旦安装,它的命令行非常简单:

    wkhtmltopdf www.myhomepage.com output.pdf
    

    从 .net 调用它也很简单,例如: Calling wkhtmltopdf to generate PDF from HTML

    还有像 iTextSharp 这样的 .net 库,您可以使用它们来生成 pdf 和其他静态输出类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 2011-01-04
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 2013-01-20
      相关资源
      最近更新 更多