在我的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>
任何帮助都会受到高度赞赏(^ _ ^)
Kardo
答案 0 :(得分:0)
如果您希望获取html表单并生成PDF,我最喜欢的工具是wkhtmltopdf。你必须在你的服务器上安装这个(我很想知道其他人是否找到了wkhtmltopdf的.net库!:]。)。
安装后,其命令行非常简单:
wkhtmltopdf www.myhomepage.com output.pdf
从.net调用它也很简单,例如: Calling wkhtmltopdf to generate PDF from HTML
还有像iTextSharp这样的.net库,可用于生成pdfs和其他静态输出类型。
答案 1 :(得分:0)
听起来像一个漫长的过程。提交,转换为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();
我希望在某种程度上有所帮助...