【发布时间】:2020-06-03 19:50:39
【问题描述】:
我需要我的 Access 数据库来创建一键发送的电子邮件。
这适用于 Outlook,我为 Gmail 修改了代码。
我不想硬编码电子邮件用户名和密码。我想从主窗体上的组合框中选择它。
Private Sub Email_Allocation_List_Click()
Dim newMail As CDO.Message
Dim mailConfiguration As CDO.Configuration
Dim fields As Variant
Dim msConfigURL As String
On Error GoTo errHandle
Set newMail = New CDO.Message
Set mailConfiguration = New CDO.Configuration
mailConfiguration.Load -1
Set fields = mailConfiguration.fields
With newMail
.Subject = "subject"
.From = [Forms]![Main form]![EmailAddress].Column(1)
.To = "email address"
.CC = "email address"
.BCC = ""
.TextBody = "Hello, " & vbNewLine & vbNewLine & _
"Please find attached todays list of lines to be allocated." & _
vbNewLine & vbNewLine & "Kind Regards." & vbNewLine & vbNewLine & "Carly"
.AddAttachment "file location"
End With
msConfigURL = "http://schemas.microsoft.com/cdo/configuration"
With fields
.Item(msConfigURL & "/smtpusessl") = True
.Item(msConfigURL & "/smtpauthenticate") = 1
.Item(msConfigURL & "/smtpserver") = "smtp.gmail.com"
.Item(msConfigURL & "/smtpserverport") = 465
.Item(msConfigURL & "/sendusing") = 2
.Item(msConfigURL & "/sendusername") = [Forms]![Main form]![EmailAddress].Column(1)
.Item(msConfigURL & "/sendpassword") = [Forms]![Main form]![EmailAddress].Column(2)
.Update
End With
newMail.Configuration = mailConfiguration
newMail.Send
MsgBox "E-Mail has been sent", vbInformation
exit_line:
'// Release object memory
Set newMail = Nothing
Set mailConfiguration = Nothing
Exit Sub
errHandle:
MsgBox "Error: " & Err.Description, vbInformation
GoTo exit_line
End Sub
我检查了组合框是否适用于文本框。
【问题讨论】:
-
显然,硬编码一个值和从一个表单(或其他任何地方)提供相同的值应该没有区别。您可能不小心提供了错误的值或错误的类型(
CStr可以帮助您)。首先打印出[Forms]![Main form]![EmailAddress].Column(1)和[Forms]![Main form]![EmailAddress].Column(2)的值 -
@Erik A 我用下面的方法做到了,它在文本框上工作得很好(我也尝试用这种格式而不是
[Forms]![Main form]![EmailAddress].Column(2)Private Sub EmailAddress_Click() Me.Password = Me.EmailAddress.Column(2) end sub -
代码似乎是正确的,所以@ErikA 的评论似乎是正确的 - 你的组合框没有提供你所期望的。
标签: vba email ms-access gmail cdo.message