.NET Core - Вложение вызывает сбой при отправке почты - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть следующий код, который работает, когда у меня нет строки attachment.add. (Я удалил адреса и пароль).

Пожалуйста, помогите, я предполагаю, что я делаю что-то не так с вложением, я просто не уверен, что!

Внутреннее исключение

{System.ObjectDisposedException: невозможно получить доступ к удаленному объекту. Имя объекта: 'ReferenceReadStream'. в System.Net.Mime.MimeBasePart.EndSend (IAsyncResult asyncResult) в System.Net.Mail.Message.EndSend (IAsyncResult asyncResult) в System.Net.Mail.SmtpClient.SendMessageCallback (результат IAsyncResult)}

    [HttpPost]
    public async Task<String> PostProfilePicture(IFormFile file, int ID)
    {
        var name = Guid.NewGuid().ToString("N").ToUpper() + ".png";
        try
        {
            var stream = file.OpenReadStream();
            await sendEmail(stream, name);
        }
        catch (Exception ex)
        {
            return ex.Message.ToString();
        }

       return ""
    }

  public async Task sendEmail(Stream stream, String filename){
        var attachment = new Attachment(stream, filename);

        var smtpClient = new SmtpClient

        {
            Host = "smtp.gmail.com", // set your SMTP server name here
            Port = 587, // Port 
            EnableSsl = true,
            Credentials = new NetworkCredential("xxxxxxx@gmail.com", "xxxxxxxx")
        };

        var message = new MailMessage("xxxxxxx@gmail.com", "xxxxxxx@gmail.com");


            message.Subject = "Hello Alec!!";
            message.Body = "How are you doing.";
            message.Attachments.Add(attachment);




            await smtpClient.SendMailAsync(message);
        }
    }

Ответы [ 2 ]

0 голосов
/ 03 ноября 2018

Я думаю, что поток не читается до конца:

Попытка:

    var fileContent = stream.ReadToEnd();
    var attachment = new Attachment(fileContent, filename);

    var smtpClient = new SmtpClient

Возможно, вам необходимо прочитать документацию перед тем, как позвонить в SendEmail

0 голосов
/ 02 ноября 2018

Я думаю, что поток должен быть читабельным, добавить

[HttpPost]
public async Task<String> PostProfilePicture(IFormFile file, int ID)
{
    var name = Guid.NewGuid().ToString("N").ToUpper() + ".png";
    try
    {
        await sendEmail(file, name); //send the file not the open read stream
    }
    catch (Exception ex)
    {
        return ex.Message.ToString();
    }

   return "";
}



public async Task sendEmail(IFormFile file, String filename){

        using(var stream = file.OpenReadStream()){ //You open your stream here
        var attachment = new Attachment(stream, filename);

        var smtpClient = new SmtpClient

        {
            Host = "smtp.gmail.com", // set your SMTP server name here
            Port = 587, // Port 
            EnableSsl = true,
            Credentials = new NetworkCredential("xxxxxxx@gmail.com", "xxxxxxxx")
    };

    var message = new MailMessage("xxxxxxx@gmail.com", "xxxxxxx@gmail.com");


        message.Subject = "Hello Alec!!";
        message.Body = "How are you doing.";
        message.Attachments.Add(attachment);

        await smtpClient.SendMailAsync(message);
    }
}
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...