将图像附加到字节的电子邮件
Attach Image to email from byte
我正忙于了解如何处理来自 website -> service -> email
的图像。
到目前为止,我所做的是将图像转换为 base64
,然后将其上传到我的服务。接下来,我将其转换为字节数组,然后将其存储到我的数据库中。
在将字节插入我的数据库的同时,我想通过将图像附加到电子邮件来发送图像。
此时附件只是一个我无法打开的文件,所以我猜它只是一个字节数组而不是图像。
C#
public string SendEmail(string send)
{
try
{
TestDb db = new TestDb();
TestImage result = new TestImage();
string[] arData = send.Split('|');
byte[] bytes = new byte[arData[0].Length * sizeof(char)];
System.Buffer.BlockCopy(arData[0].ToCharArray(), 0, bytes, 0, bytes.Length);
result.TestImg = bytes;
result.TestId = int.Parse(arData[1].ToString());
db.TestImage.Attach(result);
db.TestImage.Add(result);
db.SaveChanges();
string foto = "name";
Attachment att = new Attachment(new MemoryStream(bytes), foto);
MailMessage mail = new MailMessage();
NetworkCredential cred = new NetworkCredential("Test@gmail.com", "Test123");
mail.To.Add("Test@gmail.com");
mail.Subject = "subject Test";
mail.Attachments.Add(att);
mail.From = new MailAddress("Test@gmail.com");
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587);
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = cred;
smtp.Send(mail);
return result.Id.ToString();
}
catch (Exception)
{
throw;
}
}
Angularjs
$scope.link = '\img\ionic.png';
var imageData=$base64.encode($scope.link);
$scope.sendimg = function() {
console.log(imageData);
$http.post("http://localhost:53101/TruckService.svc/sendEmail/" + imageData + '|' + 1
)
.success(function(data) {
})
.error(function(data) {
console.log("failure");
})
}
就我而言,它来自我的资源。但最终还是一样。制作一个字节[]后,我像这样附加它:
byte[] logo = BmpToBytes_MemStream(Properties.Resources.gcs_logo);
emailMessage.Attachments.AddFileAttachment("logo.jpg", logo);
emailMessage.Attachments[emailMessage.Attachments.Count - 1].IsInline = true;
emailMessage.Attachments[emailMessage.Attachments.Count - 1].ContentId = "gcs_logo.jpg";
private static byte[] BmpToBytes_MemStream(Bitmap bmp)
{
byte[] bmpBytes = null;
using (MemoryStream ms = new MemoryStream())
{
// Save to memory using the Jpeg format
bmp.Save(ms, ImageFormat.Jpeg);
// read to end
bmpBytes = ms.GetBuffer();
bmp.Dispose();
}
return bmpBytes;
}
希望对您有所帮助。
我认为问题在于将图像转换为 base64。因此,通过将其转换回图像来检查 imageData
中的图像是否正确。
您可以使用在线工具将base64转换为图片Link
因此,如果这是问题所在,请尝试按如下方式转换您的图片,
function toDataUrl(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
toDataUrl('url', function(base64Img){
// Base64DataURL
});
我正忙于了解如何处理来自 website -> service -> email
的图像。
到目前为止,我所做的是将图像转换为 base64
,然后将其上传到我的服务。接下来,我将其转换为字节数组,然后将其存储到我的数据库中。
在将字节插入我的数据库的同时,我想通过将图像附加到电子邮件来发送图像。
此时附件只是一个我无法打开的文件,所以我猜它只是一个字节数组而不是图像。
C#
public string SendEmail(string send)
{
try
{
TestDb db = new TestDb();
TestImage result = new TestImage();
string[] arData = send.Split('|');
byte[] bytes = new byte[arData[0].Length * sizeof(char)];
System.Buffer.BlockCopy(arData[0].ToCharArray(), 0, bytes, 0, bytes.Length);
result.TestImg = bytes;
result.TestId = int.Parse(arData[1].ToString());
db.TestImage.Attach(result);
db.TestImage.Add(result);
db.SaveChanges();
string foto = "name";
Attachment att = new Attachment(new MemoryStream(bytes), foto);
MailMessage mail = new MailMessage();
NetworkCredential cred = new NetworkCredential("Test@gmail.com", "Test123");
mail.To.Add("Test@gmail.com");
mail.Subject = "subject Test";
mail.Attachments.Add(att);
mail.From = new MailAddress("Test@gmail.com");
System.Net.Mail.SmtpClient smtp = new System.Net.Mail.SmtpClient("smtp.gmail.com", 587);
smtp.UseDefaultCredentials = false;
smtp.EnableSsl = true;
smtp.Credentials = cred;
smtp.Send(mail);
return result.Id.ToString();
}
catch (Exception)
{
throw;
}
}
Angularjs
$scope.link = '\img\ionic.png';
var imageData=$base64.encode($scope.link);
$scope.sendimg = function() {
console.log(imageData);
$http.post("http://localhost:53101/TruckService.svc/sendEmail/" + imageData + '|' + 1
)
.success(function(data) {
})
.error(function(data) {
console.log("failure");
})
}
就我而言,它来自我的资源。但最终还是一样。制作一个字节[]后,我像这样附加它:
byte[] logo = BmpToBytes_MemStream(Properties.Resources.gcs_logo);
emailMessage.Attachments.AddFileAttachment("logo.jpg", logo);
emailMessage.Attachments[emailMessage.Attachments.Count - 1].IsInline = true;
emailMessage.Attachments[emailMessage.Attachments.Count - 1].ContentId = "gcs_logo.jpg";
private static byte[] BmpToBytes_MemStream(Bitmap bmp)
{
byte[] bmpBytes = null;
using (MemoryStream ms = new MemoryStream())
{
// Save to memory using the Jpeg format
bmp.Save(ms, ImageFormat.Jpeg);
// read to end
bmpBytes = ms.GetBuffer();
bmp.Dispose();
}
return bmpBytes;
}
希望对您有所帮助。
我认为问题在于将图像转换为 base64。因此,通过将其转换回图像来检查 imageData
中的图像是否正确。
您可以使用在线工具将base64转换为图片Link
因此,如果这是问题所在,请尝试按如下方式转换您的图片,
function toDataUrl(url, callback, outputFormat){
var img = new Image();
img.crossOrigin = 'Anonymous';
img.onload = function(){
var canvas = document.createElement('CANVAS');
var ctx = canvas.getContext('2d');
var dataURL;
canvas.height = this.height;
canvas.width = this.width;
ctx.drawImage(this, 0, 0);
dataURL = canvas.toDataURL(outputFormat);
callback(dataURL);
canvas = null;
};
img.src = url;
}
toDataUrl('url', function(base64Img){
// Base64DataURL
});