Skip to content

Commit 170fe35

Browse files
committed
client: add Client.readResponse helper
1 parent 52a8bf5 commit 170fe35

File tree

1 file changed

+15
-20
lines changed

1 file changed

+15
-20
lines changed

client.go

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -183,12 +183,9 @@ func (c *Client) greet() error {
183183
c.conn.SetDeadline(time.Now().Add(c.CommandTimeout))
184184
defer c.conn.SetDeadline(time.Time{})
185185

186-
_, _, err := c.text.ReadResponse(220)
186+
_, _, err := c.readResponse(220)
187187
if err != nil {
188188
c.text.Close()
189-
if protoErr, ok := err.(*textproto.Error); ok {
190-
return toSMTPErr(protoErr)
191-
}
192189
return err
193190
}
194191

@@ -237,6 +234,14 @@ func (c *Client) Hello(localName string) error {
237234
return c.hello()
238235
}
239236

237+
func (c *Client) readResponse(expectCode int) (int, string, error) {
238+
code, msg, err := c.text.ReadResponse(expectCode)
239+
if protoErr, ok := err.(*textproto.Error); ok {
240+
err = toSMTPErr(protoErr)
241+
}
242+
return code, msg, err
243+
}
244+
240245
// cmd is a convenience function that sends a command and returns the response
241246
// textproto.Error returned by c.text.ReadResponse is converted into SMTPError.
242247
func (c *Client) cmd(expectCode int, format string, args ...interface{}) (int, string, error) {
@@ -249,15 +254,8 @@ func (c *Client) cmd(expectCode int, format string, args ...interface{}) (int, s
249254
}
250255
c.text.StartResponse(id)
251256
defer c.text.EndResponse(id)
252-
code, msg, err := c.text.ReadResponse(expectCode)
253-
if err != nil {
254-
if protoErr, ok := err.(*textproto.Error); ok {
255-
smtpErr := toSMTPErr(protoErr)
256-
return code, smtpErr.Message, smtpErr
257-
}
258-
return code, msg, err
259-
}
260-
return code, msg, nil
257+
258+
return c.readResponse(expectCode)
261259
}
262260

263261
// helo sends the HELO greeting to the server. It should be used only when the
@@ -555,10 +553,10 @@ func (d *dataCloser) Close() error {
555553
if d.c.lmtp {
556554
for expectedResponses > 0 {
557555
rcpt := d.c.rcpts[len(d.c.rcpts)-expectedResponses]
558-
if _, _, err := d.c.text.ReadResponse(250); err != nil {
559-
if protoErr, ok := err.(*textproto.Error); ok {
556+
if _, _, err := d.c.readResponse(250); err != nil {
557+
if smtpErr, ok := err.(*SMTPError); ok {
560558
if d.statusCb != nil {
561-
d.statusCb(rcpt, toSMTPErr(protoErr))
559+
d.statusCb(rcpt, smtpErr)
562560
}
563561
} else {
564562
return err
@@ -569,11 +567,8 @@ func (d *dataCloser) Close() error {
569567
expectedResponses--
570568
}
571569
} else {
572-
_, _, err := d.c.text.ReadResponse(250)
570+
_, _, err := d.c.readResponse(250)
573571
if err != nil {
574-
if protoErr, ok := err.(*textproto.Error); ok {
575-
return toSMTPErr(protoErr)
576-
}
577572
return err
578573
}
579574
}

0 commit comments

Comments
 (0)