9

この質問はさまざまな文脈で何度か尋ねられたことは知っていますが、明確な答えは見つかりませんでした. Outlook を使用したアクセス アプリケーションに電子メールを実装していますが、これをやめたいと考えています。電子メールの目的の 1 つは、ユーザーがパスワードを忘れた場合にそのユーザーに電子メールを送信することです。ログイン画面でユーザー名を選択できます。[パスワードを忘れた] をクリックすると、ログイン情報を含む電子メールが (ユーザー名に関連付けられた電子メール アドレスに) 送信されます。

これに関する問題は、電子メール機能がそのままユーザーのマシンから Outlook で電子メールを送信することです。そのため、ユーザーは他のユーザー名の「パスワードを忘れた」可能性があり、機密情報を確認するために自分の Outlook 送信ボックス (送信済みアイテム) を表示できます。

phpのメール機能のようにサーバーからメールを送信する方法はありますか? セキュリティ プロンプトの後、ユーザーの Outlook アドレスからではなく、同じ電子メール アドレス (support@company.com) から電子メールを送信したいと考えています。これが不可能な場合は、他の回避策のアイデアを受け入れます。

また、すべての潜在的なユーザーのマシンにインストールする必要があるソフトウェアをインストールすることは現実的ではないことも付け加えておきます。

これは可能ですか?

4

5 に答える 5

13

Windows には、Collaborative Data Objects (CDO) と呼ばれるオブジェクトが含まれています。このオブジェクトを使用すると、他の前提条件 (ファイアウォールが開いている、ISP がポートをブロックしていない、SMTP サーバーでアカウントが構成されている、SMTP サーバーがリレーを許可しているなど) が満たされていると仮定して、任意の SMTP サーバーを使用して電子メールを送信できます。

私が見つけたほとんどの例では、推奨される遅延バインディングを使用しています。XP でのテストでは、事前バインディングを使用する場合の正しいライブラリ参照は、"Microsoft CDO for Windows 2000 Library" であることがわかりました。

電子メールを送信するときはいつでも、ある種の電子メール サーバーを介して (または外部から) 送信する必要があることを知っておくことが重要です。これは、その電子メール サーバーで認証する必要があることを意味し、通常は、まさにその電子メール サーバーに存在する「From」電子メール アドレスを使用して電子メールを送信する必要があることも意味します。

遅延バインディングを使用したコードを次に示します。

Const cdoSendUsingPickup = 1
Const cdoSendUsingPort = 2
Const cdoAnonymous = 0
' Use basic (clear-text) authentication.
Const cdoBasic = 1
' Use NTLM authentication
Const cdoNTLM = 2 'NTLM

Public Sub SendEmail()
    Dim imsg As Object
    Dim iconf As Object
    Dim flds As Object
    Dim schema As String

    Set imsg = CreateObject("CDO.Message")
    Set iconf = CreateObject("CDO.Configuration")
    Set flds = iconf.Fields

    ' send one copy with SMTP server (with autentication)
    schema = "http://schemas.microsoft.com/cdo/configuration/"
    flds.Item(schema & "sendusing") = cdoSendUsingPort
    flds.Item(schema & "smtpserver") = "mail.myserver.com"
    flds.Item(schema & "smtpserverport") = 25
    flds.Item(schema & "smtpauthenticate") = cdoBasic
    flds.Item(schema & "sendusername") = "email@email.com"
    flds.Item(schema & "sendpassword") = "password"
    flds.Item(schema & "smtpusessl") = False
    flds.Update

    With imsg
        .To = "email@email.com"
        .From = "email@email.com"
        .Subject = "Test Send"
        .HTMLBody = "Test"
        '.Sender = "Sender"
        '.Organization = "My Company"
        '.ReplyTo = "address@mycompany.com"
        Set .Configuration = iconf
        .Send
    End With

    Set iconf = Nothing
    Set imsg = Nothing
    Set flds = Nothing
End Sub
于 2012-07-20T13:58:22.693 に答える
12

これは、MS Access 2010 /Windows7で機能します

sMailServer = "myISPsmtp" 'Not just any old smtp
sMailFromAddress = "me"
sMailToAddress = "me"

Set ObjMessage = CreateObject("CDO.Message")
sToAddress = sMailToAddress
sSubject = "Subject"
sBody = "MailBody"

ObjMessage.Subject = sSubject
ObjMessage.From = sMailFromAddress
ObjMessage.To = sToAddress
'ObjMessage.cc = sCCAddress
ObjMessage.TextBody = sBody
'ObjMessage.AddAttachment sMailAttachment
ObjMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
ObjMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = sMailServer
ObjMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
ObjMessage.Configuration.Fields.Update
ObjMessage.send

詳細: http: //msdn.microsoft.com/en-us/library/ms526318 (v = exchg.10).aspx

于 2012-07-20T13:43:25.023 に答える
2

私は十分な評判を持っていないので、これをコメントに追加することはできません.

「このメソッドを使用すると、サーバー上のあらゆるものを偽装できるようです。addAttachment メソッドがあることに気付きました。相対パス、つまり Excel シートで機能しますか?」

私にとってはうまくいきます(Access 2010、Exchange 2010):

.AddAttachment ("URL はこちら")

https://msdn.microsoft.com/en-us/library/ms526453(v=exchg.10).aspx https://msdn.microsoft.com/en-us/library/ms526983(v=exchg.10) .aspx

于 2015-06-10T18:27:51.747 に答える
1

次の MS-Access VBA コードは、smtp.office365.com で機能します。smtpusessl=true を示しますが、ポートを指定しません。そうしないと、エラー 5.7.57 が発生します。

Sub SMPTTest2()
Set emailObj = CreateObject("CDO.Message")

emailObj.From = "name@myaddress.com"
emailObj.To = "name@youraddress.com"
emailObj.Subject = "Test CDO"
emailObj.TextBody = "Test CDO"
'emailObj.AddAttachment "c:\windows\win.ini"

Set emailConfig = emailObj.Configuration


emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "smtp.office365.com"
'Exclude the following line    
'emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 587
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "name@myaddress.com"
emailConfig.Fields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "mypassword"
emailConfig.Fields.Update

emailObj.Send

If Err.Number = 0 Then MsgBox "Done"
End Sub
于 2016-02-13T22:27:20.760 に答える