Merge pull request #7 from inliquid/main

Fix sendmail invocation
This commit is contained in:
Winni Neessen 2022-05-27 10:57:54 +02:00 committed by GitHub
commit eed1eeecff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

26
msg.go
View file

@ -514,17 +514,11 @@ func (m *Msg) WriteToSendmailWithContext(ctx context.Context, sp string, a ...st
if err != nil { if err != nil {
return fmt.Errorf("failed to set STDERR pipe: %w", err) return fmt.Errorf("failed to set STDERR pipe: %w", err)
} }
defer func() {
_ = se.Close()
}()
si, err := ec.StdinPipe() si, err := ec.StdinPipe()
if err != nil { if err != nil {
return fmt.Errorf("failed to set STDIN pipe: %w", err) return fmt.Errorf("failed to set STDIN pipe: %w", err)
} }
defer func() {
_ = si.Close()
}()
// Start the execution and write to STDIN // Start the execution and write to STDIN
if err := ec.Start(); err != nil { if err := ec.Start(); err != nil {
@ -537,20 +531,20 @@ func (m *Msg) WriteToSendmailWithContext(ctx context.Context, sp string, a ...st
} }
} }
// Read the stderr pipe for possible errors
var serr []byte
en, err := se.Read(serr)
if err != nil {
return fmt.Errorf("failed to read STDERR pipe: %w", err)
}
if en > 0 {
return fmt.Errorf("sendmail command failed: %s", serr)
}
// Close STDIN and wait for completion or cancellation of the sendmail executable // Close STDIN and wait for completion or cancellation of the sendmail executable
if err := si.Close(); err != nil { if err := si.Close(); err != nil {
return fmt.Errorf("failed to close STDIN pipe: %w", err) return fmt.Errorf("failed to close STDIN pipe: %w", err)
} }
// Read the stderr pipe for possible errors
serr, err := io.ReadAll(se)
if err != nil {
return fmt.Errorf("failed to read STDERR pipe: %w", err)
}
if len(serr) > 0 {
return fmt.Errorf("sendmail command failed: %s", string(serr))
}
if err := ec.Wait(); err != nil { if err := ec.Wait(); err != nil {
return fmt.Errorf("sendmail command execution failed: %w", err) return fmt.Errorf("sendmail command execution failed: %w", err)
} }