【问题标题】:Send mail with "Send As" or change sender使用“发送为”发送邮件或更改发件人
【发布时间】:2019-04-06 17:00:48
【问题描述】:

我正在编写一个脚本来自动化 Outlook 2016。我有一个帐户,有两个来自客户的不同收件箱。

在脚本结束时,我需要从运行脚本的收件箱的名称发送一封电子邮件。我被授权以两个收件箱的名义发送电子邮件,但我无法使用脚本来执行此操作。我发布了我的实际代码:

代码:

Function Send-Email {
    param ([String]$desde,[String]$subject,[String]$buzon,[String]$inc)


$mail = $Outlook.CreateItem(0)
$firma ="
Textplan
"

$mail.subject = "Closed Ticket "+$subject
[String]$cuerpo =@"
Dear colleague,

bla bla bla

Thank you.
"@

$mail.sender = $buzon
$mail.body = $cuerpo+" "+$firma 
$mail.To = $desde
$mail.Send()
Start-Sleep 3

}

$Outlook = New-Object -ComObject Outlook.Application
$desde = client2@mail.com
$buzon = inbox1@mail.com
$inc = 000000001
$subject = "Automat request"
Send-Email -desde $desde -subject $asunto -buzon $Buzon1 -inc $inc

【问题讨论】:

  • Send-MailMessage 没有被使用有什么原因吗?当你运行你的脚本时会发生什么?请将任何错误消息复制/粘贴到问题中。
  • 我看到你声明了$buzon,但从不使用它。 ->-buzon $Buzon1。是不是打错字了?
  • @lit Send-MailMessage 不运行,控制台不发送消息但邮件不去
  • @matt $mail.sender = $buzon 我使用 $buzon1 来声明第一个收件箱,我使用 2 个收件箱,$buzon1 和 $buzon2 但我认为没有必要在这里编写脚本中的其他步骤

标签: powershell powershell-4.0 outlook-2016 email-address


【解决方案1】:

您的问题看起来是:

  1. 对象在它被使用的函数之外定义:

    $Outlook = New-Object -ComObject Outlook.Application
    
  2. 变量中不带引号的字符串:

    $desde = client2@mail.com
    $buzon = inbox1@mail.com
    $inc = 000000001
    
  3. 单引号和双引号的混搭

    • 我建议阅读 about_quoting_rules 以了解其中的区别,因为在字符串中使用变量时这一点非常重要。
  4. 函数参数$inc 定义有数据但不用于任何事情?

    • 如果不使用,建议将其删除。

不是特别的问题,但我已将此处的字符串 (@" "@) 更改为带有换行符 (`r`n`) 的普通字符串


解决问题并整理代码后:

Function Send-Email {
    param (
        [String]$desde,
        [String]$subject,
        [String]$buzon,
        [String]$inc
    )

    $firma = 'Textplan'
    $cuerpo = "Dear colleague,`r`nbla bla bla`r`nThank you."

    $Outlook = New-Object -ComObject Outlook.Application
    $mail = $Outlook.CreateItem(0)
    $mail.subject = 'Closed Ticket ' + $subject
    $mail.sender = $buzon
    $mail.body = "$cuerpo $firma"
    $mail.To = $desde
    $mail.Send()
    Start-Sleep 3
}

$desde = 'client2@mail.com'
$subject = 'Automat request'
$buzon = 'inbox1@mail.com'
$inc = '000000001'

Send-Email -desde $desde -subject $subject -buzon $buzon -inc $inc

我没有 Outlook 来测试代码,但是通过使用 Outlook.Application 文档检查它现在似乎是有效的。

【讨论】:

  • 我复制并使用它。问题是 $mail.sender,这不像我想要的那样工作。不工作,电子邮件与原始收件箱一起发送,而不是与客户端的电子邮件收件箱一起发送。
  • 我不使用 Outlook 发送邮件,因此无法找到确切的问题,我猜您需要以不同的方式指定发件人。可能是帐户名称,也可能是其他属性 (property list here)
【解决方案2】:

我终于用了这条线,效果很好:

$mail.SentOnBehalfOfName = "inbox1d@mail.com"
$mail.SendUsingAccount = $Outlook.Session.Accounts | where {$_.DisplayName -eq $FromMail}

Function Send-Email {
    param (
        [String]$desde,
        [String]$subject,
        [String]$buzon,
        [String]$inc
    )

    $firma = 'Textplan'
    $cuerpo = "Dear colleague,`r`nbla bla bla`r`nThank you."

    $Outlook = New-Object -ComObject Outlook.Application
    $mail = $Outlook.CreateItem(0)
    $mail.subject = 'Closed Ticket ' + $subject
    $mail.sender = $buzon
    $mail.body = "$cuerpo $firma"
    $mail.SentOnBehalfOfName = "inbox1d@mail.com"
    $mail.SendUsingAccount = $Outlook.Session.Accounts | where {$_.DisplayName -eq $FromMail}
    $mail.Send()
    Start-Sleep 3
}

$desde = 'client2@mail.com'
$subject = 'Automat request'
$buzon = 'inbox1@mail.com'
$inc = '000000001'

Send-Email -desde $desde -subject $subject -buzon $buzon -inc $inc 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 2015-01-30
    • 2011-07-21
    • 1970-01-01
    • 2010-10-07
    • 2023-03-26
    • 1970-01-01
    相关资源
    最近更新 更多