Adrian4263 Ответов: 1

Проблема кодирования кнопок электронной почты в Visual Basic.


Кто-нибудь знает, что есть какая-то сторонняя бесплатная программа, которая может заменить EASendMailObj.Mail? Или любой метод использования EASendMailObjLib.Почта стала бесплатной? Потому что сейчас..Я использую это для отправки электронной почты,система говорит, что Smtp.LicenseCode = "TryIt" уже истек.Ниже приведен мой код:

Dim Smtp As New EASendMailObjLib.Mail
                    Smtp.LicenseCode = "TryIt"

                    Smtp.FromAddr = eid  '"ab@mail.com"
                    Smtp.AddRecipientEx(email, 0)

                    Smtp.Subject = "abcde"
                    Smtp.BodyText = "abcde"

                    '' Add attachment from local disk
                    If Smtp.AddAttachment(pdfFile) <> 0 Then
                        MsgBox("Failed to add attachment with error:" & Smtp.GetLastErrDescription())
                    End If

                    Smtp.ServerAddr = server '"smtp.gmail.com"
                    Smtp.ServerPort = port ' 465

                    '' detect SSL/TLS automatically
                    Smtp.SSL_init()

                    Smtp.UserName = eid '"ab@mail.com"
                    Smtp.Password = pass '"123"

                    If Smtp.SendMail() = 0 Then
                        '' MsgBox("email was sent successfully!")
                        Label1.Text = "1"
                    Else
                        MsgBox("failed to send email with the following error:" & Smtp.GetLastErrDescription())
                    End If
                Else
                End If
            Next
            If Label1.Text = "1" Then
                MsgBox("email was sent successfully!")
            End If
            Label1.Text = ""
        End If

Я решаю эту проблему уже около 1 недели,но и не могу ее решить.Надеюсь,вы, ребята, сможете мне помочь, действительно головная боль для этой части.
Заранее благодарю вас.

[Edit]добавлено форматирование блока кода[/Edit]

1 Ответов

Рейтинг:
0

Thomas Daniels

Привет,

Вам действительно не нужно использовать стороннюю библиотеку для отправки электронной почты. Просто использовать System.Net.Mail.SmtpClient:
http://msdn.microsoft.com/en-us/library/system.net.mail.smtpclient.aspx[^]
Отправка электронной почты в C# с вложениями или без них: общая процедура.[^] (С#)
Отправка электронной почты в C# с вложениями или без них: общая процедура.[^] (VB.NET)
Пример:

Imports System.Net
Imports System.Net.Mail   ' add these lines at the top of your file
Dim Smtp As New SmtpClient(server, port)
Dim msg As New MailMessage()
msg.From = New MailAddress(eid)
msg.[To].Add(email)
msg.Subject = "abcde"
msg.Body = "abcde"
msg.IsBodyHtml = True
' if your email body is not HTML, change this into false or remove this line
msg.Attachments.Add(New Attachment(pdfFile))
Smtp.EnableSsl = True
Smtp.Credentials = New NetworkCredential(eid, pass)
Try
	Smtp.Send(msg)
	Label1.Text = "1"
Catch e As Exception
	MsgBox("failed to send email with the following error:" + e.Message)
End Try
' now, add other code if you want

Надеюсь, это поможет.


Adrian4263

Не нужно использовать стороннюю библиотеку?Можете показать мне простой пример? Или изменить мой код выше? Потому что ссылка,которую вы дали, я не так много понимаю.Спасибо

Thomas Daniels

Я добавил пример.

Adrian4263

Ладно,у меня есть вопрос.Какую серверную часть я должен написать?Протокол SMTP?

Thomas Daniels

Да, в вашем случае ... smtp.gmail.com"

Adrian4263

Ладно. сообщение.From = New MailAddress(eid) <<The meail address is write my e-mail address is it?И SMTP.Учетные данные = новый а networkcredential (ИД, пасс)&ЛТ;&ЛТ; удостоверение N пароль заменить а networkcredential или заменить на кронштейн?

Thomas Daniels

Глутамат натрия.From address-это адрес, с которого будет отправлено письмо: Ваш адрес.

Протокол SMTP.Учетные данные = новый а networkcredential(ИД, пасс) - это не сторонние версии:
<small>
Smtp.UserName = eid '"ab@mail.com"
Smtp.Password = pass '"123"
</small>

Adrian4263

Это означает, что мне не нужно писать какой-либо адрес в msg.С адреса,потому что те, кому я хочу отправить почту, считываются из базы данных.

Протокол SMTP.Учетные данные = новый а networkcredential(ИД, пасс),поэтому я хочу, чтобы заменить мой адрес электронной почты в ИД и пасс?

Thomas Daniels

Что именно вы имеете в виду?
Вы всегда должны указывать пароль адреса электронной почты, с которого вы отправляете электронное письмо.

Adrian4263

Да,я это знаю.Я имею в виду, где я должен написать адрес электронной почты отправителя и пароль.

Thomas Daniels

Адрес электронной почты в поле <small>eid</small> переменная и пароль в поле <small>pass</small> переменная.

Adrian4263

Ладно,я понял.Я иду попробовать и посмотреть,я думаю, что это полезно, и большое вам спасибо :)

Thomas Daniels

Всегда пожалуйста!

Adrian4263

adrian_leong90@hotmail.com это моя электронная почта, не могли бы вы отправить ее мне,у меня есть к вам один вопрос.Спасибо

Thomas Daniels

Почему я не могу пригласить тебя сюда?

Adrian4263

Потому что код довольно длинный. Разве это разумно?

Thomas Daniels

Вы можете задать его здесь, даже если код длинный. Но всегда предоставляйте самый короткий фрагмент, насколько это возможно.

Adrian4263

Роджер,во-первых, мой код кнопки электронной почты получил 2 части,часть,которую я показал выше, которая является частью 2, только что я попробовал код получил ошибку, так что я покажу вам весь код кнопки электронной почты.Надеюсь, вы поможете мне решить эту ошибку.

Thomas Daniels

Если вы покажете мне код, я попытаюсь найти ошибку.

Adrian4263

Ниже приведен мой код кнопки электронной почты:

Private Sub Button1_Click(бывал отправитель как система.Объект, бывал е как система.EventArgs) Обрабатывает Button1.Щелчок
Dim dsd как новый набор данных
Dim sql As String = "Select * from email"
Dim cmd как новая команда SqlCommand(sql, connect)
дадаптер.Команды selectcommand = ЦМД
ДСД.Сброс()
дадаптер.Заполнение(dsd)

Если ДСД.Таблицы(0).Строки.Тогда считайте > 0
Тусклый тип = dsd.Таблицы(0).строки(0).элемент("тип")
Дим ИД = ЗПР.Таблицы(0).строки(0).элемент("id").Метод toString.Отделка
Дим пройти = ЗПР.Таблицы(0).строки(0).элемент("проход").Метод toString.Отделка
Тусклый порт = dsd.Таблицы(0).строки(0).элемент("порт").Метод toString.Отделка
Dim server = dsd.Таблицы(0).строки(0).элемент("сервер").Метод toString.Отделка

MsgBox("начните отправлять электронную почту ...")

Для i = 0 - dSet.Tables(0).Rows.Количество - 1
Dim email As String = dSet.Tables(0).Rows(i).Пункт("электронная почта").Метод toString.Отделка
Если электронная почта < & gt; "" То
Dim id As String = dSet.Tables(0).Rows(i).Пункт("эмпид").Метод toString

Dim CrExportOptions Как Новые Экспортные Функции
Dim CrDiskFileDestinationOptions Как Новые DiskFileDestinationOptions()
Dim crformatTypeOptions как новые PdfRtfWordFormatOptions()
CrDiskFileDestinationOptions.DiskFileName = _
Конфигурационный менеджер.Параметр appsettings("pypath")
CrExportOptions = obj-файлы.ExportOptions
crformatTypeOptions.FirstPageNumber = i
crformatTypeOptions.LastPageNumber = i
crformatTypeOptions.UsePageRange = True
С CrExportOptions
.ExportDestinationType = ExportDestinationType.DiskFile
.ExportFormatType = ExportFormatType.PortableDocFormat
.DestinationOptions = CrDiskFileDestinationOptions
.FormatOptions = crformatTypeOptions
Конец С
параметр obj.Экспорт()

'_________________________________________________________________________________
Dim Smtp Как Новый EASendMailObjLib.Mail
Smtp.LicenseCode = "TryIt"

протокол SMTP.FromAddr = eid '"ab@mail.com"
Протокол SMTP.AddRecipientEx(по электронной почте, 0)

Протокол SMTP.Тема = "аавв"
Протокол SMTP.BodyText = "аавв"

"Добавить вложение с локального диска
Если Smtp.AddAttachment(pdfFile) <> 0 затем
&Ампер функцию MsgBox("не удалось добавить вложение с ошибкой:"; протокола SMTP.GetLastErrDescription())
Конец, Если

Smtp.ServerAddr = сервер '"smtp.gmail.com"
Протокол SMTP.ServerPort = порт 465

"автоматическое обнаружение SSL/TLS
Протокол SMTP.SSL_init()

Протокол SMTP.Имя пользователя = ИД '"ab@mail.com"
Smtp.Password = pass '"123"

Если Smtp.SendMail() = 0, То
"MsgBox("письмо было отправлено успешно!")
Этикетка 1.Текст = "1"
Еще
MsgBox("не удалось отправить электронное письмо со следующей ошибкой:" & Smtp.GetLastErrDescription())
Конец, Если
Еще
Конец, Если
Следующий
Если Label1.Тогда Text = "1"
MsgBox("электронная почта была успешно отправлена!")
Конец, Если
Этикетка 1.Текст = ""
Конец, Если
'____________________________________________________________________________________________________________

Конец Подводной Лодки

Thomas Daniels

И какую ошибку вы получаете?

Thomas Daniels

Ты должен измениться:
<small>

Dim Smtp As New EASendMailObjLib.Mail
Smtp.LicenseCode = "TryIt"

Smtp.FromAddr = eid '"ab@mail.com"
Smtp.AddRecipientEx(email, 0)

Smtp.Subject = "aabb"
Smtp.BodyText = "aabb"

'' Add attachment from local disk
If Smtp.AddAttachment(pdfFile) <> 0 Then
MsgBox("Failed to add attachment with error:" & Smtp.GetLastErrDescription())
End If

Smtp.ServerAddr = server '"smtp.gmail.com"
Smtp.ServerPort = port ' 465

'' detect SSL/TLS automatically
Smtp.SSL_init()

Smtp.UserName = eid '"ab@mail.com"
Smtp.Password = pass '"123"

If Smtp.SendMail() = 0 Then
'' MsgBox("email was sent successfully!")
Label1.Text = "1"
Else
MsgBox("failed to send email with the following error:" & Smtp.GetLastErrDescription())
End If
Else
End If
Next
If Label1.Text = "1" Then
MsgBox("email was sent successfully!")
End If</small>

в:
<small>
Dim Smtp As New SmtpClient(server, port)
Dim msg As New MailMessage()
msg.From = New MailAddress(eid)
msg.[To].Add(email)
msg.Subject = "abcde"
msg.Body = "abcde"
msg.IsBodyHtml = True
' if your email body is not HTML, change this into false or remove this line
msg.Attachments.Add(New Attachment(pdfFile))
Smtp.EnableSsl = True
Smtp.Credentials = New NetworkCredential(eid, pass)
Try
Smtp.Send(msg)
Label1.Text = "1"
Catch e As Exception
MsgBox("failed to send email with the following error:" + e.Message)
End Try</small>

и добавить
<small>
Imports System.Net.Mail
Imports System.Net
</small>
в верхней части вашего файла кода.

Adrian4263

Я изменяю часть 2 кода,после этого я хочу запустить программу,всплывают там были ошибки сборки,вдруг появляются 12 ошибок,всплывают в другой части, ее под словом попала Красная линия.Например, этот код страницы 11 пройти &ЛТ;&ЛТ;слово 11 слово есть красная линия под словом.

Thomas Daniels

Что это за сообщение об ошибке?

Adrian4263

Пожалуйста,подождите немного, я пойду попробую еще раз посмотреть, можно ли бежать.
В скобке напишите адрес электронной почты и пароль правильно? ("моя почта@.hotmail.com", "пароль") нужно поставить "" <<это?

Thomas Daniels

Но если вы используете адрес Hotmail, то не используйте его smtp.gmail.com как SMTP-сервер. SMTP-сервер для Hotmail является smtp.live.com
Дополнительные сведения о конфигурации Hotmail SMTP:
http://www.serversmtp.com/en/smtp-hotmail

И да, вы должны написать адрес электронной почты и пароль между ними. ( и )

Adrian4263

("MyEmail@hotmail.com", "MyPassword") или ("MyEmail@hotmail.com и "мой пароль")?

Тогда мой сервер должен написать ("Smtp.live.com", 465) p/s:465 - это порт.

Thomas Daniels

Используйте первое: ("MyEmail@hotmail.com", "мой пароль")

И если вы хотите использовать Hotmail, то вам следует создать свой SmtpClient таким образом:

Dim Smtp как новый SmtpClient("smtp.live.com", 465)

Adrian4263

SmtpClient Smtp = новый SmtpClient("smtp.live.com", 465) где код должен меня поставить?
Под тусклым Smtp как новый SmtpClient("Smtp.live.com", 465)?

Thomas Daniels

Нет, вы должны заменить его
Dim Smtp как новый SmtpClient("smtp.gmail.com", 465)
с:
Dim Smtp как новый SmtpClient("smtp.live.com", 465)

Adrian4263

Ладно,я только что проверил код.
глутамат натрия.From = New MailAddress(eid)<<эта строка всплывает msg сказал, что параметр 'address' не может быть пустой строкой.
Имя параметра: адрес.

Thomas Daniels

Привет,

Измените eid на строку в вашем адресе электронной почты.

Adrian4263

Я пробовал,но не могу.Я изменяю ИД на ("adrian_leong90@hotmail.com") это всплывающее окно msgbox >>не удалось отправить электронное письмо со следующей ошибкой: сбой отправки почты.

Thomas Daniels

Вы изменили свои учетные данные на:
Smtp.Credentials = new NetworkCredential("adrian_leong90@hotmail.com", "ваш пароль")

Adrian4263

Мои верительные грамоты таковы
Smtp.Credentials = new NetworkCredential("adrianleong263@hotmail.com", "MyPassword"),вроде этого не может?

Adrian4263

Я уже поставил оба места на одно и то же письмо уже,но оно все равно одно и то же,покажите мне msgbox >>не удалось отправить письмо со следующей ошибкой: сбой отправки почты.

Thomas Daniels

Успешно ли добавлена ваша привязанность?

Adrian4263

Должно быть, добавить успешно.Мой код части 1-это экспорт и прикрепление файла,вы видите какие-либо проблемы?

Thomas Daniels

К сожалению, я не вижу проблемы. Я не знаю содержимого вашей базы данных. Используйте отладчик, чтобы найти ошибку.

Adrian4263

Как использовать отладчик для поиска ошибки?Теперь у меня есть 0 ошибок,я просто отлаживаю программу, нажимаю кнопку электронной почты,а затем всплывает MsgBox("не удалось отправить электронную почту со следующей ошибкой:" + e.Message)ошибка отправки почты заменить на e.Message.Не можете считать ошибкой право?

Thomas Daniels

Если вы используете Visual Studio: поместите точку останова в первую строку метода нажатия кнопки. Нажмите Клавишу F5. Появится ваша форма. Нажмите на кнопку. Затем вы перейдете к файлу кода и сможете пройти через все строки метода, чтобы увидеть, что не так.

Adrian4263

Ладно,наконец-то я могу отправить письмо успешно.Я меняю его порт с 465 на 25.Большое вам спасибо.
Но у меня все еще есть проблема,например,у меня есть 10 человек,которые могут выбрать,что такое A1-A10,после того,как я выберу его, появится еще одна страница, пример:я выбрал A1-A1, он показывает 1 страницу, если только 1 Страница я нажимаю кнопку электронной почты, она может быть отправлена успешно.Если я выберу от А1 до А3,то он будет приходить на 3 страницы,и я иду нажать кнопку электронной почты он только может отправить первую страницу выйти, а затем выйти эта следующая ошибка:
Obj,Export<< эта строка кода ошибки "процесс не может получить доступ к файлу 'C:\....\...\...\py1.pdf-потому что его использует другой процесс.

Adrian4263

Я уже решил ошибку Obj.Export.Но у меня все еще есть небольшая проблема,то есть PDF-файл,скажем, 10 человек,от А1 до А10.Я выбрал A1 ,подошел к 1 странице,после этого я нажимаю кнопку электронной почты, которую он сначала экспортирует в PDF-файл и прикрепляет отправить его.Это не проблема.
Если я выберу от А1 до А3,то получится 3 страницы,когда я нажму кнопку электронной почты,он должен экспортировать 1 на 1 в PDF-файл и отправить,но он не будет,он объединит 3 страницы в 1 PDF-файл.В чем же проблема?

Thomas Daniels

Почему бы вам не добавить несколько адресов "кому"? Просто используйте метод 'Smtp.To.Add' несколько раз.

Adrian4263

Где этот код я должен поместить?

Thomas Daniels

Под названием " msg.Из строки = ...' добавить:
<small>
msg.To.Add('emailAddress1@example.com');
msg.To.Add('emailAddress2@example.com');</small>

Измените эти адреса электронной почты на нужные вам адреса.

Adrian4263

Я сделал это,теперь я имею в виду,например: 10 человек/10 страниц,я хочу экспортировать 10 страниц в 10 PDF-файлов,я не хочу экспортировать 10 страниц в 1 PDF-файл.Вы понимаете, что я имею в виду?Допустим, теперь у меня есть 3 страницы,которые нужно отправить 3 людям,и каждый человек получит 1 страницу,и теперь моя проблема заключается в экспорте 3 страниц в 1 PDF-файл и отправке 3 людям, что означает, что каждый человек получит 3 страницы.

Thomas Daniels

Затем вы должны экспортировать каждую страницу в отдельный PDF-файл и отправить 10 различных электронных писем с различными вложениями.

Adrian4263

На самом деле я не знаю кода для экспорта отдельного PDF-файла.Я должен выяснить это сейчас.

Thomas Daniels

Для создания PDF-файлов следует использовать стороннюю библиотеку. Вы можете использовать iTextSharp, библиотеку .NET для создания PDF-файлов:
http://sourceforge.net/projects/itextsharp/

Adrian4263

Вы знаете, что такое код? Itextsharp я никогда раньше не использовал.

Thomas Daniels

Извините, я не знаю кода. На самом деле я никогда не использовал iTextSharp, но я знаю, что вы можете создавать PDF-файлы с помощью iTextSharp.

Adrian4263

О, я вижу,на самом деле я могу создавать PDF-файлы сейчас,просто не могу разделить страницу на каждый файл.10 страниц на 1 PDF-файл за 1 запуск.

Thomas Daniels

Вы можете посмотреть здесь:
Разделение и слияние Pdf-файлов в C# с помощью iTextSharp
Это статья на языке C#, но вы можете преобразовать код C# в VB.NET использование этого онлайн-инструмента: http://converter.telerik.com/

Adrian4263

Видел, что это бесполезно для меня.Все еще есть какое-то решение?Кроме itextSharp.

Thomas Daniels

Вы можете попробовать использовать PDFsharp вместо iTextSharp

Adrian4263

Теперь кристально экспорт отчетов в PDF-файлы, использовать PDFSharp это работа?

Thomas Daniels

Если вы хотите конвертировать отчет Crystal в PDF, посмотрите здесь:
http://csharp.net-informations.com/crystal-reports/csharp-crystal-reports-export-pdf.htm

Adrian4263

Вы знаете, как удалить экспортированные файлы(код visual basic)? Если я нажму кнопку email,отчет будет экспортирован в PDF-файл и прикреплен к отправке по электронной почте.Что мне нужно, так это то, что экспортированные файлы будут автоматически удалены после отправки моей электронной почты. Это понятно?Вы можете спросить меня,если мой вопрос не ясен.

Thomas Daniels

Да, после того как вы отправили письмо, запустите этот код:
<small>
System.IO.File.Delete(pathOfYourPdfFile)</small>

Измените pathOfYourPdfFile на путь к вашему PDF-файлу или измените его на переменную, содержащую этот путь.

Adrian4263

Я пробовал,исключение ввода-вывода было необработанным(процесс не может получить доступ к файлу 'C:\......py1.pdf-потому что его использует другой процесс.)В чем же проблема?

Thomas Daniels

Попытаетесь изменить:
<small>System.IO.File.Delete(pathOfYourPdfFile)</small>
в:
<small>
msg.Dispose()
System.IO.File.Delete(pathOfYourPdfFile)</small>

Adrian4263

Под msg есть синяя линия, это неправильно?

Adrian4263

Я уже пытался, саметинг.

Thomas Daniels

Мне очень жаль, но я понятия не имею, что случилось. Извините.

Adrian4263

Все в порядке.Вы Знаете, Что Делать Петлю?

Thomas Daniels

Ты имеешь в виду это сделать петлю?

Adrian4263

Ага

Thomas Daniels

Тогда я знаю петлю Do.