如何解决无法从“ System.Drawing.Bitmap”转换为与“ SMTP”附件相关的“字符串”
下面的功能负责获取面板的屏幕截图并将其用作电子邮件的附件,而无需将其存储在本地计算机中。
我设法做到了,但是有一个小问题,它给了我这个错误:
无法从“ System.Drawing.Bitmap”转换为“字符串”
我知道也有类似的问题,但是我不知道该如何解决。
private void btnSend_Click(object sender,EventArgs e)
{
//using (var bmp = new Bitmap(workPanel.Width,workPanel.Height))
//{
// workPanel.DrawToBitmap(bmp,new Rectangle(0,bmp.Width,bmp.Height));
// bmp.Save(@"images/" + name.Text + ".png");
//}
try
{
using (var bmp = new Bitmap(workPanel.Width,workPanel.Height))
{
MailMessage mail = new MailMessage();
SmtpClient smtp = new SmtpClient("smtp.gmail.com");
mail.From = new MailAddress("email@gmail.com");
mail.To.Add(txtTo.Text); // Receivers email address comes here
mail.Subject = txtTitle.Text;
mail.Body = txtBody.Text;
mail.IsBodyHtml = true; // TO HAVE THE BODY AS HTML
System.Net.Mail.Attachment attachment;
//attachment = new System.Net.Mail.Attachment(lblLocation.Text);
attachment = new System.Net.Mail.Attachment(bmp); // <-------- ERROR COMES HERE
mail.Attachments.Add(attachment);
smtp.Port = 587;
smtp.Credentials = new System.Net.NetworkCredential("email@gmail.com","password");
smtp.EnableSsl = true;
smtp.Send(mail);
MessageBox.Show("Mail has been sent");
}
}
catch(Exception ex)
{
//MessageBox.Show(ex.Message);
MessageBox.Show("Something went wrong,this might be a problem from our end.\n" + ex.Message,"Please contact support team");
}
}
解决方法
发生错误的原因很简单:类Attachment没有使用BitMap的构造函数。
幸运的是,有一个构造器需要一个Stream。 Bit,BitMap没有方法将其转换为Stream。幸运的是,BitMap实现了ISerializable,因此我们可以将BitMap保存在流中,然后使用Attachment(Stream,...)构造函数
让我们使用make Extension方法将BitMap转换为Stream,并将Stream转换为Attachment。参见extension methods demystified
static System.IO.Stream ToStream(this System.Drawing.BitMap bmp)
{
// TODO: exception if bmp null
var stream = new MemoryStream();
Bitmap.Save(ms,Bitmap.RawFormat);
return stream;
}
static System.Net.Mail.Attachment ToAttachment(this System.Drawing.BitMap bmp)
{
// TODO: bmp is null
const string contentType = "image/jpg";
return new System.Net.Mail.Attachment(bmp.ToStream(),contentType);
}
用法:
BitMap bmp = ...
Attcahment attachement = bmp.ToAttachment();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。