J'ai un projet dans lequel j'utilise un générateur PDF pour envoyer un fichier à un utilisateur. Nous aimerions donner à l'utilisateur la possibilité de joindre ce fichier à un courriel, et nous éprouvons des difficultés à utiliser ensemble l'objet Stream et la logique de pièce jointe.Flux en tant que pièce jointe à System.Net.Mail est 0 octets
Nous commençons avec ABCpdf, qui a deux méthodes de sauvegarde: il peut enregistrer dans un flux, ou si vous lui donnez une chaîne, il va essayer d'enregistrer dans un fichier sur le disque là-bas. Nous avons fait les deux pas de problème.
Stream stream = new MemoryStream();
myPdf.Save(stream);
Tout est surtout frais à ce stade - stream
a plusieurs kilo-octets de données, et si vous .Save() dans un fichier, vous obtenez un fichier réel avec le même nombre d'octets.
Nous joindrez à un e-mail à ce stade (après initialisation de l'objet de messagerie, la mise à: Et de :, etc.):
mail.Attachments.Add(new Attachment(stream, "myPdf.pdf"));
mail.Send();
... qui nous amène aussi loin que la réception d'un e-mail avec 0 octet, mais le nom de fichier correct. Tous les exemples que je trouve en ligne utilisent un StreamReader ou un StreamWriter ou un Flush() ou quelque chose. Il semble toujours que c'est plus compliqué que de simplement passer un Stream, mais peut-être seulement une ou deux lignes plus compliquées. Aucun de ces exemples ne commence par un flux - ils essaient toujours de transformer un tableau en un flux pour vous montrer à quel point c'est facile, ou saisir un fichier à partir du disque (ce que nous ne pouvons pas faire, c'est pourquoi nous sommes excités utiliser un flux). De toute façon, si quelqu'un peut expliquer ce que je fais mal ou ce que je devrais faire, je l'apprécierais vraiment. Merci.
Dans le cas où il aide tout le monde, mon attachement était de 64 octets, mais en l'ouvrant dit que le dossier était invalide. La solution ci-dessous a également corrigé ce problème, ce n'est donc pas le cas si elle indique 0 octet. –