J'ai SendGrid en train d'envoyer des courriels entrants en tant que messages MIME bruts à mon API C#. Here is an example of the raw payload. Je souhaite être en mesure d'ouvrir les pièces jointes Excel à partir du message MIME entrant et de lire les données de ligne et de colonne.Lecture de données de pièce jointe Excel en C# à partir d'un message MIME brut publié par SendGrid
Une fois que l'API reçoit le message, j'utilise MimeKit pour traiter les pièces jointes comme suit (supposons que nous ne traitons avec des pièces jointes .xlsx ici):
using (var emailSream = GenerateStreamFromString(emailString))
{
var msg = MimeMessage.Load(emailSream);
foreach (var attachment in msg.Attachments)
{
// I want to be able to read the columns and rows of the excel sheet here.
// I am already able to skip over any non-excel type attachments without issue.
}
}
Où GenerateStreamFromString est défini comme:
private Stream GenerateStreamFromString(string s)
{
MemoryStream stream = new MemoryStream();
StreamWriter writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
J'ai essayé de charger le flux de fixation dans Excel Data Reader:
using (var attachmentStream = ((MimePart)attachment).ContentObject.Stream)
{
IExcelDataReader reader = ExcelReaderFactory.CreateOpenXmlReader(attachmentStream);
// Reader has "Cannot Find Central Directory" error.
}
ainsi que par EPPlus
var attachmentStream = ((MimePart)attachment).ContentObject.Stream
using (ExcelPackage package = new ExcelPackage(attachmentStream))
{
// Errors are thrown before we get here.
}
Mais les deux paquets jettent des erreurs, ce qui me conduit à croire que je ne reçois pas le flux de données correctement du message MIME.
Toute aide ou réflexion est grandement appréciée, merci d'avance.