nishimeno
@nishimeno

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Powershellメール送信でのアドレス情報空欄処理

解決したいこと

csvメールアドレスリストを読み込み$Toへセットしてメールを送信します。
1レコードには、1以上4未満の宛先アドレス情報が登録されております。
宛先アドレスの2つ目、3つ目が空欄の場合の処理方法についてご教示ください。

発生している問題・エラー

Send-MailMessage : パラメーター 'To の引数を確認できません。引数が null または空です。null または空でない引数を指定して、コマンドを再度実行してください。

該当するソースコード

#csv読込
$csv = Import-Csv .\sample.csv -Encoding Default -Header "csv_data_a","csv_data_b","csv_data_c","csv_data_d","csv_data_e"
$data_a = @($csv | % {$_.csv_data_a})
$data_b = @($csv | % {$_.csv_data_b})
$data_c = @($csv | % {$_.csv_data_c})
$data_d = @($csv | % {$_.csv_data_d})
$data_e = @($csv | % {$_.csv_data_e})


for ( $i = 0; $i -lt $data_a.Length; $i++ )
    {
    #メールの件名
    $title = "あれの件です("+$data_b[$i]+")"
    if($data_c[$i] -eq $null -and $data_d[$i] -eq $null)
    {
        $To = $data_a[$i]
    }
    elseif($data_c[$i] -eq $null -and $data_d[$i] -ne $null)
    {
                    $To = @($data_a[$i],$data_c[$i])
     }
     else
     {
         $To = @($data_a[$i],$data_c[$i],$data_d[$i])
     }
                       
     
     if($data_e[$i] -eq $null)
        {
            $Cc = "cc@hoge.hoge"
        }
     else
        {
            $Cc = $data_e[$i]
        }

   echo $To
}

csvファイルの中身

to,username,to2,to3,cc
tono1@hoge.hoge,User1,tono2@hoge.hoge,tono3@hoge.hoge,cc@hoge.hoge
tono1@hoge.hoge,User2, , ,cc@hoge.hoge
tono1@hoge.hoge,User3, , , 

自分で試したこと

-eq の式の部分をいくつ変えてみましたが改善できませんでした。

0

1Answer

宛先アドレスの2つ目、3つ目が空欄の場合の処理方法についてご教示ください。

Where-Objectで空欄( = 空文字列)を読み飛ばせば良い。

foreach ($x in $csv) {
    [string[]]$to = ($x.to,$x.to2,$x.to3) | ?{ $_ -ne "" }

    # 行ごとに拾った宛先と件数を出力
    Write-Host $to "($($to.Length))"  
}

結果

tono1@hoge.hoge tono2@hoge.hoge tono3@hoge.hoge (3)
tono1@hoge.hoge (1)
tono1@hoge.hoge (1)

空文字列 or Nullなら、代わりに[string]::IsNullOrWhiteSpace メソッドを使う

foreach ($x in $csv) {
    [string[]]$to = ($x.to,$x.to2,$x.to3) | ?{ -Not [string]::IsNullOrWhiteSpace($_) }

    # 行ごとに拾った宛先と件数を出力
    Write-Host $to "($($to.Length))"  
}
0Like

Your answer might help someone💌