gpt4 book ai didi

c# - 发送包含存储在数据库中的多个附件的电子邮件 (ASP.NET C#)

转载 作者:行者123 更新时间:2023-11-30 16:12:34 25 4
gpt4 key购买 nike

我希望发送包含多份简历的电子邮件。每个学生都有一份个人资料,其中附有他们的简历(有些学生有不止一份),这些资料存储在数据库中。用户搜索符合特定条件的学生,并将学生简历通过电子邮件发送给潜在雇主。

数据库:

cvID - int
UserName - varchar(50)
FileName - varchar(50)
FileType - nvarchar(50)
Data - varbinary(MAX)

进行搜索时,相应的学生会显示在结果中,每个学生都有一个下拉框,其中包含他们可用的简历。用户从他们希望附加到电子邮件的 DropDown 框中选择 Resume,单击“附加”,然后该 FileName 将添加到电子邮件区域的 ListBox。

一旦用户选择了他们希望附加的所有简历,他们就会填写剩余的电子邮件字段......收件人、发件人、主题、消息等。当用户单击“发送”时,我需要代码来附加文件从数据库中在 ListBox 中列出并发送电子邮件。

ASPX.CS 页面
使用 System.Net.Mail

protected void emlSend_Click(object sender, EventArgs e)
{
MailMessage email = new MailMessage();

email.From = new MailAddress(txtFrom.Text);
email.To.Add(txtTo.Text);
email.Subject = txtSub.Text;
email.Body = txtMsg.Text;

//Loop through lstFiles to get all values
foreach (ListItem item in lstFiles.Items)
{
if (item.Selected)
{
//Save value to string
string lstItem = item.Text;
string lstValue = item.Value;

//Connect to Server
string constr = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
using (SqlCommand cmd = new SqlCommand())
{
//Use value in Select statement
cmd.CommandText = "SELECT FileName, FileType, Data from CVData where cvID = '" + lstValue + "'";
cmd.Connection = con;
con.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
//Get CV Data
sdr.Read();
bytes = (byte[])sdr["Data"];
fileName = sdr["FileName"].ToString();

//Attach Data as Email Attachment
email.Attachments.Add(... //This is where I am now stuck

}
con.Close();
}
}
}
}

使用下面...

email.Attachments.Add(new Attachment(new MemoryStream(bytes, fileName)));

给我这个错误:

编译器错误消息:CS1502:“System.IO.MemoryStream.MemoryStream(byte[], bool)”的最佳重载方法匹配有一些无效参数

如果我以错误的方式尝试此操作,请告诉我。这是我第一次尝试做这样的事情,所以任何帮助将不胜感激!!

最佳答案

您需要使用 System.Net.Mail 命名空间。System.Web.Mail.MailMessage 已过时。

下面是如何将附件添加到 MailMessage。

// assumption is that the dropdown values contain a key to the file
// contents (resume) in the DB and the contents are retrieved as a
// byte array.

if (lstFiles != null)
{
foreach (var fileName in lstFiles)
{
int cvId = 42; // can come from dropdown etc. basically a key to the file.
byte[] resumeBytes = GetResumeFromDatabaseAsBytes(cvId);
email.Attachments.Add(new Attachment(new MemoryStream(resumeBytes, fileName)));
}
}

public static byte[] GetResumeFromDatabaseAsBytes(int cvID)
{
var connectionString = "YOUR_CONNECTION_STRING";

using (var sqlConnection = new SqlConnection(connectionString))
{
using (var sqlCommand = new SqlCommand("SELECT TOP 1 FileName, FileType, Data From RESUME_TABLE_NAME Where cvID = " + cvID, sqlConnection))
{
using (var reader = sqlCommand.ExecuteReader())
{
if (reader.Read())
{
// e.g. John_Doe.docx
string fileName = reader["FileName"].ToString() + "." + reader["FileType"].ToString();
byte[] cvData = (byte[])reader["Data"];

//return cvData;
}
}
}
}
}

以上只是获取简历内容的示例。您可以通过传递正确的参数在 1 个调用中获取所有简历。让我们知道您使用的数据访问方法。

关于c# - 发送包含存储在数据库中的多个附件的电子邮件 (ASP.NET C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22753277/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com