将图像从字节附加到电子邮件

时间:2016-06-08 10:23:10

标签: c# angularjs wcf rest bytearray

我正忙着尝试了解如何处理来自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");
              })    
  }

2 个答案:

答案 0 :(得分:0)

就我而言,它来自我的资源。但最终它是一样的。在制作了一个字节[]后,我将它附加到这样:

zip

希望这有帮助。

答案 1 :(得分:0)

我认为问题在于将图像转换为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
});