MS Access发送电子邮件(不是来自Outlook或用户的电子邮件)

Sco*_*tch 9 ms-access outlook vba

我知道这个问题已在各种背景下被问过几次,但我没有找到明确的答案.我使用outlook为访问应用程序实现了电子邮件,但我想摆脱这一点.电子邮件的目的之一是在忘记密码时向用户发送他/她的密码.他们可以为登录屏幕选择用户名,如果他们点击"忘记密码",则会发送包含登录信息的电子邮件(发送到与用户名相关联的电子邮件地址).

这个问题是电子邮件功能就是从用户的机器发送带有Outlook的电子邮件.因此,用户可以"忘记密码"其他用户名并查看他们自己的Outlook发件箱(已发送的项目)以查看敏感信息.

有没有办法像php的邮件功能一样发送电子邮件,从服务器发送邮件?我希望电子邮件从同一个电子邮件地址发送,即(support@company.com),而不是在安全提示后从用户的Outlook地址发送.如果这是不可能的,我愿意接受任何其他解决方法的想法.

我还要补充说,安装任何必须安装在每个潜在用户机器上的软件是不可行的.

这可能吗?

Fio*_*ala 12

这适用于MS Access 2010/Windows 7

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
Run Code Online (Sandbox Code Playgroud)

更多信息:http://msdn.microsoft.com/en-us/library/ms526318(v = exchg.10).aspx

  • 似乎这种方法可以让你欺骗我服务器上的任何东西.刚刚注意到有一个addAttachment方法.这可以用一个相对路径来说,一个excel表吗? (2认同)

HK1*_*HK1 12

Windows包含一个名为Collaborative Data Objects或CDO的对象.此对象允许您使用任何SMTP服务器发送电子邮件,假设满足其他先决条件(防火墙打开,ISP未阻止端口,帐户在SMTP服务器上配置,SMTP服务器允许中继等).

我发现的大多数例子都使用后期绑定,这是首选.在我对XP的测试中,如果您更喜欢使用早期绑定,那么正确的库引用似乎是"Microsoft CDO for Windows 2000 Library".

重要的是要知道,无论何时发送电子邮件,您都必须通过某种电子邮件服务器发送(或从中发送).这意味着您必须使用该电子邮件服务器进行身份验证,并且通常意味着您需要使用该电子邮件服务器上存在的"发件人"电子邮件地址发送电子邮件.

这是使用后期绑定的一些代码:

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
Run Code Online (Sandbox Code Playgroud)