[英]How to open default Mail Client with prepopulated attachment in Asp.net
I'm trying to to open the default Mail Client with prepopulated attachment in Asp.net. 我试图在Asp.net中打开带有预填充附件的默认邮件客户端 。
If i try this on a local server it's working fine but when deployed to the server it's not working anymore. 如果我在本地服务器上尝试此方法,则工作正常,但部署到该服务器后,它将不再工作。
This is what i've done so far: 到目前为止,这是我所做的:
public void SendEmail()
{
try
{
int count = GridViewDocuments.Rows.Count;
Outlook.Application oApp = new Outlook.Application();
Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem);
if (count > 0)
{
foreach (GridViewRow gr in GridViewDocuments.Rows)
{
CheckBox chckEmail = (CheckBox)gr.FindControl("chckEmail");
Label lblDocumentId = (Label)gr.FindControl("lblDocumentId");
if (chckEmail.Checked == true)
{
string documentId = lblDocumentId.Text;
string DocumentTile = "";
int DocumentId = 0;
if (documentId != "")
{
DocumentId = Convert.ToInt32(documentId);
}
DocumentTile = GridViewDocuments.Rows[gr.RowIndex].Cells[1].Text;
EmailLogs(DocumentId, DocumentTile);
string filepath = GetDocumentByReceivingInquiryIdandReceivingInquiryForm(DocumentId);
//OpenFileDialog attachment = new OpenFileDialog();
if (filepath.Length > 0)
{
oMailItem.Attachments.Add(Server.MapPath(filepath),
Outlook.OlAttachmentType.olByValue,
1);
}
filepath = "";
}
}
}
oMailItem.To = toEmail;
oMailItem.Subject = Subject;
InserLog("Sending Email By Sending Inquriy Workspace", SendingInqId.ToString());
}
catch (Exception ex)
{
}
}
Using the answer from Williwyg on this question , I was wondering if it could work in asp.net. 使用Williwyg 对此问题的回答 ,我想知道它是否可以在asp.net中工作。 After some modification it can work. 经过一些修改,它可以工作。 This snippet will create an email with attachment, convert it to an eml
file and send it to the client. 该代码片段将创建带有附件的电子邮件,将其转换为eml
文件并将其发送给客户端。
using System.Web;
using System.Text;
using System.IO;
using System.Net.Mail;
using System.Reflection;
protected void Button1_Click(object sender, EventArgs e)
{
//create an email
MailMessage message = new MailMessage();
message.From = new MailAddress("your@email.com", "MyCompany");
message.Subject = "Email subject goes here";
message.IsBodyHtml = true;
message.Body = "<html><head></head><body><font size=\"3\" color=\"#ff0000\">HTML formatted email body.</body></html>";
//add the attachment
message.Attachments.Add(new Attachment(Server.MapPath("test.pdf")));
//get the message as byte array
byte[] bin = getEmailAsEML(message);
//send the email to the client as eml
Response.ClearHeaders();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "message/rfc822";
Response.AddHeader("content-length", bin.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=\"email.eml\"");
Response.OutputStream.Write(bin, 0, bin.Length);
Response.Flush();
HttpContext.Current.ApplicationInstance.CompleteRequest();
}
public byte[] getEmailAsEML(MailMessage message)
{
using (MemoryStream ms = new MemoryStream())
{
var binaryWriter = new BinaryWriter(ms);
//Write the Unsent header to the file so the mail client knows this mail must be presented in "New message" mode
binaryWriter.Write(Encoding.UTF8.GetBytes("X-Unsent: 1" + Environment.NewLine));
var assembly = typeof(SmtpClient).Assembly;
var mailWriterType = assembly.GetType("System.Net.Mail.MailWriter");
// Get reflection info for MailWriter contructor
var mailWriterContructor = mailWriterType.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic, null, new[] { typeof(Stream) }, null);
// Construct MailWriter object with our FileStream
var mailWriter = mailWriterContructor.Invoke(new object[] { ms });
// Get reflection info for Send() method on MailMessage
var sendMethod = typeof(MailMessage).GetMethod("Send", BindingFlags.Instance | BindingFlags.NonPublic);
sendMethod.Invoke(message, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { mailWriter, true, true }, null);
// Finally get reflection info for Close() method on our MailWriter
var closeMethod = mailWriter.GetType().GetMethod("Close", BindingFlags.Instance | BindingFlags.NonPublic);
// Call close method
closeMethod.Invoke(mailWriter, BindingFlags.Instance | BindingFlags.NonPublic, null, new object[] { }, null);
return ms.ToArray();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.