(err error, serverName string)
| 100 | } |
| 101 | |
| 102 | func (c *C) wrapClientErr(err error, serverName string) error { |
| 103 | if err == nil { |
| 104 | return nil |
| 105 | } |
| 106 | |
| 107 | switch err := err.(type) { |
| 108 | case TLSError: |
| 109 | return err |
| 110 | case *exterrors.SMTPError: |
| 111 | return err |
| 112 | case *smtp.SMTPError: |
| 113 | msg := err.Message |
| 114 | if c.AddrInSMTPMsg { |
| 115 | msg = serverName + " said: " + err.Message |
| 116 | } |
| 117 | |
| 118 | if err.Code == 552 { |
| 119 | err.Code = 452 |
| 120 | err.EnhancedCode[0] = 4 |
| 121 | c.Log.Msg("SMTP code 552 rewritten to 452 per RFC 5321 Section 4.5.3.1.10") |
| 122 | } |
| 123 | |
| 124 | return &exterrors.SMTPError{ |
| 125 | Code: err.Code, |
| 126 | EnhancedCode: exterrors.EnhancedCode(err.EnhancedCode), |
| 127 | Message: msg, |
| 128 | Misc: map[string]interface{}{ |
| 129 | "remote_server": serverName, |
| 130 | }, |
| 131 | Err: err, |
| 132 | } |
| 133 | case *net.OpError: |
| 134 | if _, ok := err.Err.(*net.DNSError); ok { |
| 135 | reason, misc := exterrors.UnwrapDNSErr(err) |
| 136 | misc["remote_server"] = err.Addr |
| 137 | misc["io_op"] = err.Op |
| 138 | return &exterrors.SMTPError{ |
| 139 | Code: exterrors.SMTPCode(err, 450, 550), |
| 140 | EnhancedCode: exterrors.SMTPEnchCode(err, exterrors.EnhancedCode{0, 4, 4}), |
| 141 | Message: "DNS error", |
| 142 | Err: err, |
| 143 | Reason: reason, |
| 144 | Misc: misc, |
| 145 | } |
| 146 | } |
| 147 | return &exterrors.SMTPError{ |
| 148 | Code: 450, |
| 149 | EnhancedCode: exterrors.EnhancedCode{4, 4, 2}, |
| 150 | Message: "Network I/O error", |
| 151 | Err: err, |
| 152 | Misc: map[string]interface{}{ |
| 153 | "remote_addr": err.Addr, |
| 154 | "io_op": err.Op, |
| 155 | }, |
| 156 | } |
| 157 | default: |
| 158 | return exterrors.WithFields(err, map[string]interface{}{ |
| 159 | "remote_server": serverName, |
no test coverage detected