3

Outlook 2010を介して、VBAでExcel 2010から電子メールを送信しようとしています。SOに関する他のほとんどの回答には、VBAを使用してこれを行う方法やOutlook/Excel 2010の方法がないようです。

無料の方法はありますか?大企業内の 10 台のマシンに簡単にインストールできない限り、 Redemptionメソッドは実行可能なオプションではありません。

これは私が現在メールを送信する方法です:

Dim emailAddr As String
Dim OutApp As Object
Dim OutMail As Object

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
 .To = "xxxx@xxxx.edu"
 .Subject = "Demande"
 .HtmlBody = CombinedValueHtml
 .Send
End With

Set OutMail = Nothing
Set OutApp = Nothing

Exit Sub

事前にご協力いただきありがとうございます。

4

5 に答える 5

2

これは部分的な答えです。他の誰かが私が作業できない最後の部分を説明できることを期待して、コミュニティ Wiki の回答にしました。

この Web ページhttp://msdn.microsoft.com/en-us/library/office/aa155754(v=office.10).aspxでは、プロセスの最初の 3 つの部分について説明しています。これは 1999 年に書かれたものであり、Windows と Office の古いバージョンについて言及しているため、正確に従うことはできません。

最初のステップは、VBA プロジェクトのデジタル署名をOffice インストールに追加することですが、これは Office ツールではなく共有ツールの下にありました。VBA プロジェクトのデジタル署名を Outlookに追加するだけでは間違いを犯さないでください。

2 番目の手順は、Selfcert.exeを実行して、自分の名前でデジタル証明書を作成することです。

3 番目のステップは、Outlook の VBA エディターを開き、[ツール]、[デジタル証明書]、[選択] の順に選択して、証明書でプロジェクトに署名することです。

これらの手順を使用すると、Outlook にマクロが含まれているという警告を抑制することができますが、マクロが電子メールにアクセスしているという警告は抑制されません。この警告を抑制するには、証明書をTrusted Root Certificate Authorities Store内に配置する 4 番目の手順が必要です。この Web ページhttp://technet.microsoft.com/en-us/library/cc962065.aspxでは、証明機関の信頼モデルについて説明していますが、 Microsoft 管理コンソールを使用して 4 番目の手順をうまく実行できません。

于 2012-08-21T20:43:50.090 に答える
1

代わり.sendに次を使用します。

.Display 'displays outlook email
Application.SendKeys "%s" 'presses send as a send key

注: 表示キーを使用するときは注意してください。プログラムの実行中にマウスを動かしてクリックすると、何が起こっているかが変わる可能性があります。また、Outlook が画面に表示されて送信されます。他の作業を行っていて、これが気になる場合は、そうです。最良のアイデアではありません。

于 2014-08-17T00:06:51.413 に答える
-2

この回答では、vba を使用してメールを送信する方法を説明しました。私が日常業務で広く使用しているマクロが見つかります。

@Floern からの推奨に従って、ここに説明があります。

画像 (署名を画像として) を挿入するには、次のコードを使用できます。

ステップ 1. このコードをコピーしてクラス モジュールに貼り付け、そのクラス モジュールに「MailOptions」などの名前を付けます。

Private Message As CDO.Message
Private Attachment, Expression, Matches, FilenameMatch, i

Public Sub PrepareMessageWithEmbeddedImages(ByVal FromAddress, ByVal ToAddress, ByVal Subject, ByVal HtmlContent)

    Set Expression = CreateObject("VBScript.RegExp")
    Expression.Pattern = "\<EMBEDDEDIMAGE\:(.+?)\>"
    Expression.IgnoreCase = True
    Expression.Global = False 'one match at a time

    Set Message = New CDO.Message
    Message.From = FromAddress
    Message.To = ToAddress
    Message.Subject = Subject

    'Find matches in email body, incrementally increasing the auto-assigned attachment identifiers
    i = 1
    While Expression.Test(HtmlContent)
        FilenameMatch = Expression.Execute(HtmlContent).Item(0).SubMatches(0)
        Set Attachment = Message.AddAttachment(FilenameMatch)
        Attachment.Fields.Item("urn:schemas:mailheader:Content-ID") = "<attachedimage" & i & ">" ' set an ID we can refer to in HTML
        Attachment.Fields.Item("urn:schemas:mailheader:Content-Disposition") = "inline" ' "hide" the attachment
        Attachment.Fields.Update
        HtmlContent = Expression.Replace(HtmlContent, "cid:attachedimage" & i) ' update the HTML to refer to the actual attachment
        i = i + 1
    Wend

    Message.HTMLBody = HtmlContent
End Sub

Public Sub SendMessageBySMTP(ByVal SmtpServer, ByVal SmtpUsername, ByVal SmtpPassword, ByVal UseSSL)
    Dim Configuration
    Set Configuration = CreateObject("CDO.Configuration")
    Configuration.Load -1 ' CDO Source Defaults
    Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = SmtpServer
    'Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SmtpPort
    Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30

    If SmtpUsername <> "" Then
        Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = SmtpUsername
        Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = SmtpPassword
    End If
    Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = UseSSL
    Configuration.Fields.Update
    Set Message.Configuration = Configuration
    Message.Send
End Sub

ステップ 2.標準モジュールで、.html コンテンツを作成し、クラスからオブジェクトをインスタンス化します。

public sub send_mail()

Dim signature As String
dim mail_sender as new MailOptions 'here you are instantiating an object from the class module created previously
dim content as string

signature = "C:\Users\your_user\Documents\your_signature.png"

content = "<font face=""verdana"" color=""black"">This is some text!</font>"
content = content & "<img src=""<EMBEDDEDIMAGE:" & signature & " >"" />"

mail_sender.PrepareMessageWithEmbeddedImages _
                    FromAddress:="chrism_mail@blablabla.com", _
                    ToAddress:="addressee_mail@blablabla.com", _
                    Subject:="your_subject", _
                    HtmlContent:=content

'your_Smtp_Server, for example: RelayServer.Contoso.com
correos.SendMessageBySMTP "your_Smtp_Server", "your_network_user_account", "your_network_user_account_password", False

end sub
于 2016-03-26T19:29:50.050 に答える