(ctx context.Context, hdr textproto.Header, _ buffer.Buffer)
| 224 | } |
| 225 | |
| 226 | func (s *state) CheckBody(ctx context.Context, hdr textproto.Header, _ buffer.Buffer) module.CheckResult { |
| 227 | if !s.c.checkHeader { |
| 228 | return module.CheckResult{} |
| 229 | } |
| 230 | if s.msgMeta.Conn == nil { |
| 231 | s.log.Msg("skipping locally generated message") |
| 232 | return module.CheckResult{} |
| 233 | } |
| 234 | authName := s.msgMeta.Conn.AuthUser |
| 235 | |
| 236 | fromHdr := hdr.Get("From") |
| 237 | if fromHdr == "" { |
| 238 | return s.c.errAction.Apply(module.CheckResult{ |
| 239 | Reason: &exterrors.SMTPError{ |
| 240 | Code: 550, |
| 241 | EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, |
| 242 | Message: "Missing From header", |
| 243 | CheckName: modName, |
| 244 | }}) |
| 245 | } |
| 246 | list, err := mail.ParseAddressList(fromHdr) |
| 247 | if err != nil || len(list) == 0 { |
| 248 | return s.c.errAction.Apply(module.CheckResult{ |
| 249 | Reason: &exterrors.SMTPError{ |
| 250 | Code: 550, |
| 251 | EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, |
| 252 | Message: "Malformed From header", |
| 253 | CheckName: modName, |
| 254 | Err: err, |
| 255 | }}) |
| 256 | } |
| 257 | fromEmail := list[0].Address |
| 258 | if len(list) > 1 { |
| 259 | return s.c.errAction.Apply(module.CheckResult{ |
| 260 | Reason: &exterrors.SMTPError{ |
| 261 | Code: 550, |
| 262 | EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, |
| 263 | Message: "Multiple From addresses are not allowed", |
| 264 | CheckName: modName, |
| 265 | Err: err, |
| 266 | }}) |
| 267 | } |
| 268 | |
| 269 | var senderAddr string |
| 270 | if senderHdr := hdr.Get("Sender"); senderHdr != "" { |
| 271 | sender, err := mail.ParseAddress(senderHdr) |
| 272 | if err != nil { |
| 273 | return s.c.errAction.Apply(module.CheckResult{ |
| 274 | Reason: &exterrors.SMTPError{ |
| 275 | Code: 550, |
| 276 | EnhancedCode: exterrors.EnhancedCode{5, 7, 0}, |
| 277 | Message: "Malformed Sender header", |
| 278 | CheckName: modName, |
| 279 | Err: err, |
| 280 | }}) |
| 281 | } |
| 282 | senderAddr = sender.Address |
| 283 | } |
nothing calls this directly
no test coverage detected