Question Problème de pièce jointe (Résolu)

Plus d'informations
il y a 17 ans 3 mois #3385 par michault
Bonsoir,
En m'inspirant de script présent sur ce blog, je me suis créé une fonction d'envoi de mail que voici:

[code:1]Function SendMail {
# Paramètres:
# $to : Destinataire(s)
# $Subject : Sujet
# $body : Corps du message
# $smtpHost : Serveur SMTP
# $from : Expéditeur
# $attach : Pièce jointe

param(
[string[]] $to = $(throw \"Veuillez renseigner les destinataires\"),
[string] $subject = \"<No Subject>\",
[string] $body = $(throw \"Veuillez définir le corps du message\"),
[string] $smtpHost = $(throw \"Veuillez spécifier les serveur SMTP.\"),
[string] $from,
[string] $attach
)

## Create the mail message
$email = New-Object System.Net.Mail.MailMessage

## Populate its fields
foreach($mailTo in $to)
{
$email.To.Add($mailTo)
}
$email.From = $from
$email.Subject = $subject
$email.Body = $body
if ($attach -eq $null)
{}
else
{
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
## Send the mail
$client = New-Object System.Net.Mail.SmtpClient $smtpHost
$client.UseDefaultCredentials = $true
$client.Send($email)
}[/code:1]

Quand j'appelle ma fonction avec une pièce jointe pas de problème par contre si je ne veux pas joindre de pièce, ça plante.En effet je passe systèmatiquement sur [code:1]$email.Attachments.add($mail_attachment)[/code:1]J'en déduis qu'il y a soit une boulette dans ma fonction (mais je ne vois pas:blush: ) soit que je ne sais pas passer valeur $null en paramètre (hypothèse prioritaire à mon avis:whistle: )

Quelqu'un peut-il m'aider?
Merci

Message édité par: chm69, à: 3/12/08 21:56<br><br>Message édité par: Arnaud, à: 9/12/08 23:33

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 3 mois #3388 par Laurent Dardenne
chm69 écrit:

J'en déduis qu'il y a soit une boulette dans ma fonction

C'est du au parseur de PowerShell, avant d'aller plus loin consulte ce post qui contient l'explication du problème.

Ensuite seulement analyse ces différents cas :
[code:1]
$DebugPreference=\&quot;Continue\&quot;
#Récupérer et créer la function ValidateParameter du post cité
[/code:1]
Cas 1
[code:1]
Function SendMail( [string] $attach)
{
ValidateParameter \&quot;attach\&quot; $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \&quot;Le fichier n'existe pas : $Attach\&quot;}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}

Sendmail
Sendmail \&quot;\&quot;
Sendmail \&quot;C:\notExist.txt\&quot;
[/code:1]
En dehors du test sur le chemin on passe au travers des tests.

Cas 2
[code:1]
Function SendMail( $attach)
{
ValidateParameter \&quot;attach\&quot; $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \&quot;Le fichier n'existe pas : $Attach\&quot;}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}

Sendmail
Sendmail \&quot;\&quot;
Sendmail \&quot;C:\notExist.txt\&quot;
[/code:1]
Si la chaine est vide c'est le seul cas où on passe au travers des tests.

Cas 3
[code:1]
Function SendMail( $attach)
{
if (ValidateParameter \&quot;attach\&quot; $attach String)
{
if ( $Attach -eq [string]::Empty) {Throw \&quot;Le contenu du paramètre Attach n'est pas renseigné.\&quot;}
if (! (Test-path $Attach)) {Throw \&quot;Le fichier n'existe pas : $Attach\&quot;}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
else {Throw \&quot;La valeur du paramètre Attach est`$null ou n'est pas du type String.\&quot;}
}

Sendmail
Sendmail \&quot;\&quot;
Sendmail \&quot;C:\notExist.txt\&quot;
[/code:1]
On gére bien tous les cas, enfin ceux du test :lol:
Il y a un bug avec le type string dans la function ValidateParameter :S , j'essaie de corriger ça demain.

Ces 2 cas devraient être gérés :
[code:1]
Sendmail get-date

$d=1..20
Sendmail $d
[/code:1]

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 3 mois #3390 par michault
Réponse de michault sur le sujet Re:Problème de pièce jointe
Un grand merci pour les explications des couches-tards:lol:

J'ai pris ce qui me fallait dans tous ces scripts:

[code:1]if ( $Attach -ne [string]::Empty)
{
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}[/code:1]


Je tenterais modestement de renvoyer l'ascenseur en postant, l'automatisation de l'archivage de dossiers et la préparation pour gravage de CD que je suis en train de développer. Attention, rien de très compliqué.:P ;)
il faut savoir partager pour qu'une communauté vive.
Encore un grand merci à Laurent, Robin et Arnaud qui sont très actif.<br><br>Message édité par: chm69, à: 4/12/08 08:43

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 17 ans 3 mois #3393 par Laurent Dardenne
chm69 écrit:

J'ai pris ce qui me fallait dans tous ces scripts

Tu m'étonnes :lol:

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.076 secondes
Propulsé par Kunena