Отправить захваченную фотографию в виде вложения в UWP - PullRequest
0 голосов
/ 26 мая 2018

Итак, я уже немного стучу по этому вопросу и не могу понять, как сделать снимок, сделанный веб-камерой, и прикрепить его к электронному письму.Оба успешно отправили письмо с прикрепленным изображением.Однако, когда я пытаюсь открыть изображение, оно не открывается.

Сначала я попытался использовать LightBuzz.SMTP

    private async Task<SmtpResult> SendAlertEmail(List<CapturedPhoto> images)
    {
        using (SmtpClient client = new SmtpClient("smtp.gmail.com", 465, true, "mygmail@gmail.com", "myPassword"))
        {

            EmailMessage emailMessage = new EmailMessage();

            emailMessage.Sender.Address = "IoTAlertApp@donotreply.com";
            emailMessage.Sender.Name = "IoT App";
            emailMessage.To.Add(new EmailRecipient("myemail@gmail.com"));
            emailMessage.Subject = "ALERT | MOTION DETECTED";
            emailMessage.Body = "This is an email sent from a UWP app!";

            foreach (CapturedPhoto image in images)
            {
                int imageCount = 1;
                string fileName = "image_" + imageCount + "_" + DateTime.Now.Ticks + ".jpg";
                RandomAccessStreamReference reference = RandomAccessStreamReference.CreateFromStream(image.Frame.CloneStream());
                emailMessage.Attachments.Add(new EmailAttachment(fileName, reference));
                break;
            }
            images.Clear();
            SmtpResult result = await client.SendMailAsync(emailMessage);

            return result;
        }
    }

Затем я попытался использовать EASendMailRT и получил тот же результат

    private async Task Send_Email(byte[] image)
    {
        String Result = "";
        try
        {
            SmtpMail oMail = new SmtpMail("TryIt");
            SmtpClient oSmtp = new SmtpClient();


            oMail.From = new MailAddress("IoTSquatter@DoNotReply.com");


            oMail.To.Add(new MailAddress("myemail@gmail.com"));


            oMail.Subject = "ALERT | MOTION DETECTED";


            SmtpServer oServer = new SmtpServer("smtp.gmail.com");


            oServer.User = "myemail@gmail.com";
            oServer.Password = "password";

            oServer.Port = 465;
            oServer.ConnectType = SmtpConnectType.ConnectSSLAuto;

            Attachment oAttachment = oMail.AddAttachment("testImage.jpg",image);

            string contentID = "test001@host";
            oAttachment.ContentID = contentID;
            oMail.HtmlBody = "<html><body>this is an <img src=\"cid:"
                    + contentID + "\"> embedded picture.</body></html>";

            await oSmtp.SendMailAsync(oServer, oMail);
            Result = "Email was sent successfully!";
        }
        catch (Exception ep)
        {
            Result = String.Format("Failed to send email with the following error: {0}", ep.Message);
        }

    }

Я не уверен, что делаю не так.Я думаю, что это связано с форматом файла.

1 Ответ

0 голосов
/ 26 мая 2018

В итоге ответ был таким, каким я создавал поток.Ниже приведен правильный поток для передачи на электронную почту.

 var stream = new InMemoryRandomAccessStream();
 await mediaCapture.CapturePhotoToStreamAsync(ImageEncodingProperties.CreateJpeg(), stream);

Затем я добавил это следующим образом

string fileName = "image_"+imageCount+".png";
RandomAccessStreamReference reference = RandomAccessStreamReference.CreateFromStream(stream);
emailMessage.Attachments.Add(new EmailAttachment(fileName, reference));

Вот результат из LightBuzz

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...