Question
Problème de pièce jointe (Résolu)
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 128
- Remerciements reçus 0
il y a 17 ans 3 mois #3385
par michault
Problème de pièce jointe (Résolu) a été créé 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
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 3 mois #3388
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Problème de pièce jointe
chm69 écrit:
Ensuite seulement analyse ces différents cas :
[code:1]
$DebugPreference=\"Continue\"
#Récupérer et créer la function ValidateParameter du post cité
[/code:1]
Cas 1
[code:1]
Function SendMail( [string] $attach)
{
ValidateParameter \"attach\" $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/code:1]
En dehors du test sur le chemin on passe au travers des tests.
Cas 2
[code:1]
Function SendMail( $attach)
{
ValidateParameter \"attach\" $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/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 \"attach\" $attach String)
{
if ( $Attach -eq [string]::Empty) {Throw \"Le contenu du paramètre Attach n'est pas renseigné.\"}
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
else {Throw \"La valeur du paramètre Attach est`$null ou n'est pas du type String.\"}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/code:1]
On gére bien tous les cas, enfin ceux du test
Il y a un bug avec le type string dans la function ValidateParameter
, 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]
C'est du au parseur de PowerShell, avant d'aller plus loin consulte ce post qui contient l'explication du problème.J'en déduis qu'il y a soit une boulette dans ma fonction
Ensuite seulement analyse ces différents cas :
[code:1]
$DebugPreference=\"Continue\"
#Récupérer et créer la function ValidateParameter du post cité
[/code:1]
Cas 1
[code:1]
Function SendMail( [string] $attach)
{
ValidateParameter \"attach\" $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/code:1]
En dehors du test sur le chemin on passe au travers des tests.
Cas 2
[code:1]
Function SendMail( $attach)
{
ValidateParameter \"attach\" $attach String
if ($attach -ne $null)
{
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/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 \"attach\" $attach String)
{
if ( $Attach -eq [string]::Empty) {Throw \"Le contenu du paramètre Attach n'est pas renseigné.\"}
if (! (Test-path $Attach)) {Throw \"Le fichier n'existe pas : $Attach\"}
$mail_attachment = New-Object System.Net.Mail.Attachment $attach
$email.Attachments.add($mail_attachment)
}
else {Throw \"La valeur du paramètre Attach est`$null ou n'est pas du type String.\"}
}
Sendmail
Sendmail \"\"
Sendmail \"C:\notExist.txt\"
[/code:1]
On gére bien tous les cas, enfin ceux du test
Il y a un bug avec le type string dans la function ValidateParameter
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.
- michault
- Auteur du sujet
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 128
- Remerciements reçus 0
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é.

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
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é.
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.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 17 ans 3 mois #3393
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Problème de pièce jointe
chm69 écrit:
Tu m'étonnesJ'ai pris ce qui me fallait dans tous ces scripts
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.076 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Problème de pièce jointe (Résolu)