使用“发送为”发送邮件或更改发件人

时间:2018-11-02 12:36:33

标签: powershell powershell-v4.0 outlook-2016 email-address

我正在制作一个脚本来自动执行Outlook2016。我有一个帐户,其客户端有两个不同的收件箱。

在脚本末尾,我需要从运行脚本的收件箱的名称发送电子邮件。我被授权使用两个收件箱的名称发送电子邮件,但是我无法执行脚本。我发布了我的实际代码:

代码:

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

2 个答案:

答案 0 :(得分:0)

您的问题看起来是:

  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文档对其进行检查,现在看来是有效的。

答案 1 :(得分:0)

我终于使用了这行文字,并且运行良好:

$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