Member 14569937 Ответов: 2

Как искать файлы и прикреплять их к электронной почте - VB.NE


У меня есть CheckedListbox (импортированный из базы данных mysql), в котором перечислены все мои папки, где хранятся мои файлы. И то, что мне нужно сделать, это для каждого отмеченного элемента в контрольном списке, чтобы найти папку, а затем прикрепить файл из этой папки к Почте.

Что я сделал, так это создал электронное письмо и отправил его только с одним вложением. Просто с надписью: "e_mail. Вложения. Добавлять". Почта будет сгенерирована, и найденный файл будет прикреплен и отправлен.

Но когда я делаю это в каждом цикле FOR, то ни один файл не будет выбран и добавлен в мою почту. Почта будет сгенерирована и отправлена без каких-либо ошибок, но вложенных файлов нет.

Private Sub SendMail()
    Dim Smtp_Server As New SmtpClient
    Dim e_mail As New MailMessage()
    Smtp_Server.UseDefaultCredentials = False
    Smtp_Server.Credentials = New Net.NetworkCredential("MAIL", "PASS")
    Smtp_Server.Port = 587
    Smtp_Server.EnableSsl = True
    Smtp_Server.DeliveryMethod = SmtpDeliveryMethod.Network
    Smtp_Server.Host = "HOST"
    If MonthTextBox.Text = "" Or MonthTextBox.ForeColor = Color.Silver Then
        MsgBox("Input month please", Title:="MO Text Box")
    Else
        Dim MOTextValue As String = MonthTextBox.Text
        Dim nowYear As Integer = Date.Now.Year

        For Each itemchecked As DataRowView In CheckedListBoxWO.CheckedItems
            Dim File_path As String = "C:\Test\" & itemchecked.Item(1) & "\" & nowYear & "\" & MOTextValue & "\"
            Dim File_Name As String = Dir("C:\Test\" & itemchecked.Item(1) & "\" & nowYear & "\" & MOTextValue & "\File " & MOTextValue & "*.xlsx")
            Dim attachmentFile As Net.Mail.Attachment = New Net.Mail.Attachment(File_path & File_Name)
            e_mail.Attachments.Add(attachmentFile)
        Next

        Dim sb As New System.Text.StringBuilder
        sb.AppendLine("Hello,<br />")
        sb.AppendLine("<br />")            
        sb.AppendLine("Test Attachment,<br />")           
        sb.AppendLine("<br />")
        sb.AppendLine("------------------------------------------<br />")            
        e_mail.From = New MailAddress("MY MAIL")
        e_mail.To.Add("EMAIL")
        e_mail.Subject = ("TESTFILE - " & MOTextValue & "")
        e_mail.SubjectEncoding = System.Text.Encoding.UTF8
        e_mail.IsBodyHtml = True
        e_mail.Priority = MailPriority.Normal
        e_mail.Body = sb.ToString()
        e_mail.BodyEncoding = System.Text.Encoding.UTF8
        Smtp_Server.Send(e_mail)
    End If
    MsgBox("Mails was sent", Title:="Mail")
End Sub


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

Как я уже говорил, с помощью этого кода почта будет создана и отправлена, но в ней нет вложенного файла. Если я сделаю это без "для каждого"... цикл, то один файл будет добавлен без проблем. Но мне нужно добавить больше файлов, на самом деле для каждого отмеченного элемента в CheckedListBox моя программа должна искать эту папку, и если есть файл, то прикрепить его по почте, а также посмотреть в другой папке и так далее...

2 Ответов

Рейтинг:
0

MadMyche

Именно здесь в уравнение входит отладка; установите a Точка прерывания в самом начале For Each цикл и посмотреть, что у вас есть для значений:
1. Путь к файлу
2. Имя файла
3. attachmentFile


Обычно, когда я создаю электронные письма с вложениями, я делаю это в следующем порядке
1. Определите сервер и учетные данные
2. Создайте экземпляр SMTP-клиента, перегруженный учетными данными сервера &
3. Определить письмо, основных письмо информация (от, кому, тема, тело)
4. Создайте экземпляр MailMessage, перегруженный основной информацией по электронной почте
5. привязанности - это рутина, все свои собственные:

5-1. Создайте объект вложения, перегруженный именем файла и типом содержимого (например, MediaTypeNames.Приложение.Октет)
5-2. Создать ContentDisposition от привязанности
5-3. Заполните ContentDisposition датами, именем, размером и типом
5-4. Добавьте вложение в почтовое сообщение.

Я бы тоже использовал using блоки для очистки объектов SMTP и Mail для правильного размещения ресурсов.

Хорошая ссылка от хорошо доверенного человека здесь, в C# , как рутина сама по себе:
Отправка электронной почты в C# с вложениями или без них: общая процедура.[^]


Рейтинг:
0

Richard Deeming

Dir это возврат к VB6, и его следует избегать в пользу System.IO занятия.

Попробуй:

For Each itemchecked As DataRowView In CheckedListBoxWO.CheckedItems
    Dim folderPath = System.IO.Path.Combine("C:\Test\", itemchecked.Item(1), nowYear, MOTextValue)
    For Each filePath As String In System.IO.Directory.EnumerateFiles(folderPath, "File " & MOTextValue & "*.xlsx")
        Dim attachmentFile As New Net.Mail.Attachment(filePath)
        e_mail.Attachments.Add(attachmentFile)
    End If
Next
Если он все еще не работает, то вам нужно будет отладить свой код.