Samira Radwan Ответов: 1

Asp.net fileupload как вложение SQL dbmail


Всем Привет,
Я пытаюсь отправить электронное письмо с помощью SQL dbmail, который работает очень хорошо для меня.
При попытке прикрепить файл из загрузка файлов управление на странице aspx выдает ошибку, так как файл является недопустимым.

Пожалуйста, посоветуйте, что нужно сделать, чтобы отправить загруженный файл в качестве вложения с помощью dbmail. Я знаю, что использование System.Net.Mail довольно просто, но требования заключаются в использовании SQL database mail

Заранее спасибо

Что я уже пробовал:

Я попытался использовать абсолютный путь к загруженному файлу или полное имя файла.
if (uploadCV.HasFile)
    {
        FileInfo file = new FileInfo(uploadCV.FileName);
        if (file.Extension == ".pdf")
        {
            //send email
            string messageBody = "hello world";
            string subject = "Careers";
            using (SqlConnection connection = new SqlConnection(ConfigurationManager.ConnectionStrings["connection"].ConnectionString))
            {
				connection.Open();
                SqlCommand cmd = new SqlCommand("msdb.dbo.sp_send_dbmail", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.Add("@profile_name", SqlDbType.VarChar).Value = "profile";
                cmd.Parameters.Add("@body_format", SqlDbType.VarChar).Value = "HTML";
                cmd.Parameters.Add("@recipients", SqlDbType.VarChar).Value = "email"; 
                cmd.Parameters.Add("@subject", SqlDbType.VarChar).Value = subject;
                cmd.Parameters.Add("@body", SqlDbType.VarChar).Value = messageBody;
                //cmd.Parameters.Add("@file_attachments ", SqlDbType.NVarChar,-1).Value = uploadCV.FileName;
                //cmd.Parameters.Add("@copy_recipients",SqlDbType.VarChar).Value = ;
                //cmd.Parameters.Add("@blind_copy_recipients", SqlDbType.VarChar).Value = "";
                cmd.ExecuteNonQuery();
                connection.Close();
            }
        }
        else
        {
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alert", "alert('("+file.Name+") is not valid, only PDF format');", true);                       
        }
	}

Ram Nunna

Я думаю, вам нужно добавить значение @recipients с помощью "To email Id".
Не могли бы вы добавить сообщение об ошибке?

1 Ответов

Рейтинг:
1

ZurdoDev

Обратитесь к документации, sp_send_dbmail (Transact-SQL) | Microsoft Docs[^].

Он гласит::

Цитата:
[ @file_attachments= ] 'file_attachments'
Это разделенный точкой с запятой список имен файлов, которые нужно прикрепить к сообщению электронной почты. Файлы в списке должны быть указаны как абсолютные пути. Список вложений имеет тип nvarchar(max). По умолчанию Почта базы данных ограничивает размер вложений файлов до 1 Мб на файл.


Samira Radwan

Спасибо за ваш ответ. Я знаю, что мне нужно получить абсолютный путь к вложенному файлу, проблема заключается в управлении uploadFile, файл находится на клиентской/пользовательской машине, которую я не могу использовать на сервере.MapPath и я не хотим сохранять загруженный файл (FileUpload.Сохранить как). Я ищу способ загрузить PDF-файл и отправить его в виде вложения с помощью SQL database mail.

ZurdoDev

Файл должен быть где-то, к чему sql server может получить доступ. Нет никакого способа обойти это.

Но почему файл находится на компьютере клиента? Разве ваш сайт не работает на сервере?

Richard Deeming

Путь от элемента управления загрузкой файлов-это путь, а иногда и просто имя файла на клиенте.

Если вам нужен путь на сервере, вы должны сохранить его где-то на сервере. :)

Samira Radwan

Спасибо вам обоим @011111100010 и @Richard Deeming за ваши ценные комментарии.
@011111100010 пользователь собирается загрузить файл со своей машины с помощью веб-интерфейса. Я думаю, что у меня нет выбора, чтобы сначала сохранить загруженный файл перед отправкой в качестве вложения.

ZurdoDev

Правильный. Просто сохраните его где-нибудь на сервере, что и делает загрузка в любом случае. Тогда вы можете отправить его.