VB.Net: открытое мировоззрение с to, cc, предметом, телом, приложением - PullRequest
3 голосов
/ 08 марта 2011

Я хочу открыть прогноз из моего приложения vb.net. Я хочу заполнить часть письма «Кому», «Тема», «Текст» и «Вложение» через мое заявление здесь мне не нужно отправлять почту. Я хочу просто открыть Outlook с параметром mail.

Подскажите, пожалуйста, как мне решить эту задачу

Ответы [ 4 ]

5 голосов
/ 08 марта 2011

Общая процедура выглядит следующим образом:

  • Создайте mailto: строку ссылки с необходимой информацией
  • Передайте эту строку в Process.Start.Откроется почтовый клиент по умолчанию , Outlook не требуется.

Например, строка может выглядеть следующим образом: mailto:mail@example.com?subject=Hello&body=test.Отдельные поля должны быть должным образом экранированы (URL-кодировка).Дополнительную информацию о синтаксисе можно найти в RFC 2368 .

Вложение можно добавить с помощью аргумента attachment в строке mailto.Согласно комментарию к MSDN , это должно быть вдвое больше.То есть:

mailto:mail@example.com?subject=Hello&body=Test&attachment=""C:\file.txt""
2 голосов
/ 02 июля 2014

Эту задачу можно решить с помощью офисного взаимодействия, просто добавьте ссылку на наш проект в Microsoft.Office.Interop.Outlook.Тогда в вашей заявке можно создать письмо, а затем прикрепить файлы следующим образом:

Imports Microsoft.Office.Interop

...

Dim Outlook As Outlook.Application
Dim Mail As Outlook.MailItem
Dim Acc As Outlook.Account

Outlook = New Outlook.Application()
Mail = Outlook.CreateItem(Microsoft.Office.Interop.Outlook.OlItemType.olMailItem)
Mail.To = "test@test.com"
Mail.Subject = "Hello World!"

'If you have multiple accounts you could change it in sender:
For Each Acc In Outlook.Session.Accounts
    'Select first pop3 for instance.
    If Acc.AccountType = Microsoft.Office.Interop.Outlook.OlAccountType.olPop3 Then
        Mail.Sender = Acc
    End If
Next

'Take default account if no sender...
If Not Sender Is Nothing Then Mail.Sender = Sender.CurrentUser.AddressEntry

'Attach files
Mail.Attachments.Add("C:\Path\To\File.pdf")
Mail.Attachments.Add("C:\Path\To\File1.pdf")

'Append some text:
Mail.HTMLBody &= "Hello World!"

Mail.Display()

Это старый вопрос, но я думаю, что это может помочь кому-то еще.

0 голосов
/ 10 декабря 2015

На случай, если кто-то захочет сделать это без использования Outlook ...

Imports System.Net.Mail

Public Function SendEmail(EmailBody As String, EmailSubject As String, EmailTo As String, AttachmentPath As String, EmailAsHTML As Boolean)

    Dim Mail As New MailMessage

    Try
        Dim SMTP As New SmtpClient("smtp.gmail.com")
        SMTP.EnableSsl = True
        SMTP.Credentials = New System.Net.NetworkCredential("[your gmail address@gmail.com]", "[the associated password]")
        SMTP.Port = 587

        Mail.From = New MailAddress("""[Friendly Name]"" <[your gmail address@gmail.com>")

        'Split Multiple Addresses
        If EmailTo.Contains(";") Then
            For Each EmailAddress In EmailTo.Split(";")
                Mail.To.Add(Trim(EmailAddress))
            Next
        Else
            Mail.To.Add(Trim(EmailTo))
        End If

        Mail.Subject = EmailSubject
        Mail.Body = EmailBody
        If AttachmentPath <> "" Then Mail.Attachments.Add(New Mail.Attachment(AttachmentPath))
        Mail.IsBodyHtml = EmailAsHTML

        SMTP.Send(Mail)

        'Clear Mail Object
        Mail.Dispose()

        'Function Return
        Return True

    Catch ex As Exception

        'Function Return
        Return False

    End Try
End Function
0 голосов
/ 13 мая 2015

Нашел этот великий пост.

Программно добавление вложений в электронные письма в C # и VB.NET

Связанная статья описывает, как использовать функцию MAPISendMail, предоставляемую MAPI32.dll.

    <DllImport("MAPI32.DLL")> _
     Private Shared Function MAPISendMail(ByVal sess As IntPtr, 
         ByVal hwnd As IntPtr, ByVal message As MapiMessage, 
         ByVal flg As Integer, ByVal rsv As Integer) As Integer
    End Function

    Private Function SendMail(ByVal strSubject As String, 
        ByVal strBody As String, ByVal how As Integer) As Integer
        Dim msg As MapiMessage = New MapiMessage()
        msg.subject = strSubject
        msg.noteText = strBody

        msg.recips = GetRecipients(msg.recipCount)
        msg.files = GetAttachments(msg.fileCount)

        m_lastError = MAPISendMail(New IntPtr(0), New IntPtr(0), msg, how, 
            0)
        If m_lastError > 1 Then
            MessageBox.Show("MAPISendMail failed! " + GetLastError(), 
                "MAPISendMail")
        End If

        Cleanup(msg)
        Return m_lastError
    End Function

Надеюсь, это поможет кому-то, кто может оказаться здесь, как я.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...