繁体   English   中英

电子邮件附件中的 c# Base64

[英]c# Base64 in email attachment

我知道我陷入了一个愚蠢的问题......现在我满怀希望地来到这里,你可以帮助我。 简单情况:我需要从数据库发送带有附件的电子邮件。 我自己完成了,但是...我不知道为什么,但是发送的电子邮件附件不正确。 珍贵的附件内容代码,我从我的数据库中得到的。

我的代码:

static void IncomeMessage()
{
    SqlConnection conn = new SqlConnection("Data Source=xxx;Initial Catalog=xxx;User ID=xxx;Password=xxx");
    SqlCommand cmd = new SqlCommand("Here is my SQL SELECT", conn);
    SqlDataAdapter da = new SqlDataAdapter(cmd);
    DataTable dt = new DataTable();
    da.Fill(dt);

    foreach (DataRow dr in dt.Rows)
    {
        try
        {
            var AID = dr["ID"].ToString();
            var Ids = dr["MessageID"].ToString();
            var SuperOrganizationTitle = dr["SuperOrganizationTitle"].ToString();
            var Date = dr["Date"].ToString();
            var Title = dr["Title"].ToString();
            var Description = dr["Description"].ToString();
            var DBFile = dr["File"].ToString();
            var Filename = dr["FileName"].ToString();

            MailMessage oMail = new MailMessage("test@test.com", "guntisvindels@gmail.com", "New message with theme: " + Title, "Message Income: " + Date + " From " + SuperOrganizationTitle + ". Message Content: " + Description);

            DBFile = GetBase64(DBFile);

            var bytes = Encoding.ASCII.GetBytes(DBFile);
            MemoryStream strm = new MemoryStream(bytes);
            Attachment data = new Attachment(strm, Filename);
            ContentDisposition disposition = data.ContentDisposition;
            data.ContentId = Filename;
            data.ContentDisposition.Inline = true;
            oMail.Attachments.Add(data);

            SmtpClient oSmtp = new SmtpClient();
            SmtpClient oServer = new SmtpClient("test.test.com");

            oServer.Send(oMail);
        }
        catch (Exception ex)
        {
            //TraceAdd("Error=" + ex.Message.ToString());
        }
    }
}

为了从数据库文件字段中删除不必要的数据(标签),我使用此代码

public static string GetBase64(string str)
{
    var index1 = str.IndexOf("<content>");
    index1 = index1 + "<content>".Length;
    var index2 = str.IndexOf("</content>");
    var kek = Slice(str, index1, index2);
    return kek;
}

public static string Slice(string source, int start, int end)
{
    if (end < 0)
    {
        end = source.Length + end;
    }
    int len = end - start;
    return source.Substring(start, len);
}

启动我的代码时,我可以向我发送电子邮件,我会收到它。 但是来自数据库文件字段的带有我的 Base64 代码的消息内容附件。 这是一个问题 - 我哪里出错了,我怎样才能收到带有已写入数据库的正确附件的电子邮件。 感谢您的关注

PS 数据库中的附件写正确,因为K2集成平台可以正确显示

以下是文件列(DBFile)中包含的数据库示例

<file><name>zinojums.html</name><content>PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiIC8+PHN0eWxlPmh0bWwsYm9keXtmb250LWZhbWlseTpBcmlhbCxIZWx2ZXRpY2Esc2Fucy1zZXJpZjtmb250LXNpemU6MTBwdDt9aDF7Zm9udC1zaXplOjE0cHQ7fWgye2ZvbnQtc2l6ZToxMnB0O31we2JhY2tncm91bmQtY29sb3I6I0Y3RUVEQTttYXJnaW46MDtwYWRkaW5nOjhweDt9aHJ7aGVpZ2h0OjFweDsgYm9yZGVyOjAgbm9uZTsgY29sb3I6ICM1RjlCRDQ7IGJhY2tncm91bmQtY29sb3I6ICM1RjlCRDQ7fTwvc3R5bGU+PC9oZWFkPjxib2R5PjxoMT5JbmZvcm3EgWNpamEgbm8gVmFsc3RzIGllxYbEk211bXUgZGllbmVzdGE8L2gxPjxoMj5Eb2t1bWVudHMgcGllxYZlbXRzPC9oMj48cD5Ob2Rva8S8dSBtYWtzxIF0xIFqYSBOci4gPGI+TEFUVklKQVMgVkFMU1RTIFJBRElPIFVOIFRFTEVWxKpaSUpBUyBDRU5UUlMgQVMgKDQwMDAzMDExMjAzKTwvYj4gaWVzbmllZ3RhaXMgZG9rdW1lbnRzICI8Yj5aacWGYXMgcGFyIGRhcmJhIMWGxJNtxJNqaWVtPC9iPiIgTnIuIDxiPjU1NDYyNTY5PC9iPiBwaWXFhmVtdHMgdW4gaWVrxLxhdXRzIFZJRCBkYXR1YsSBesSTLjxiciAvPjwvcD48IS0tY29udGVudC0tPjxociAvPsWgaXMgZS1wYXN0cyBpciBpenZlaWRvdHMgYXV0b23EgXRpc2tpLCBsxatkemFtIHV6IHRvIG5lYXRiaWxkxJN0LjxiciAvPlBpZXNsxJNndGllcyBWSUQgRWxla3Ryb25pc2vEgXMgZGVrbGFyxJPFoWFuYXMgc2lzdMSTbWFpOiA8YSBocmVmPSJodHRwczovL2Vkcy52aWQuZ292Lmx2Ij5lZHMudmlkLmdvdi5sdjwvYT4uPC9ib2R5PjwvaHRtbD4=</content></file>

现在,您用来从字符串创建二进制数据的方法没有考虑字符串是专门用 base64 编码的这一事实。

你需要更换

var bytes = Encoding.ASCII.GetBytes(DBFile);

var bytes = Convert.FromBase64String(DBFile);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM