code: func (m *Message) multipartRequest(pToken, rToken, url string) (*http.Request, error) {
  	body := &bytes.Buffer{}
  
  	if m.attachment == nil {
  		return nil, ErrMissingAttachement
  	}
  
  	// Write the body as multipart form data
  	w := multipart.NewWriter(body)
  
  	// Write the file in the body
  	fw, err := w.CreateFormFile("attachment", "attachment")
  	if err != nil {
  		return nil, err
  	}
  
  	written, err := io.Copy(fw, m.attachment)
  	if err != nil {
  		return nil, err
  	}
  
  	if written > MessageMaxAttachementByte {
  		return nil, ErrMessageAttachementTooLarge
  	}
  
  	// Handle params
  	for k, v := range m.toMap(pToken, rToken) {
  		if err := w.WriteField(k, v); err != nil {
  			return nil, err
  		}
  	}
  
  	if err := w.Close(); err != nil {
  		return nil, err
  	}
  
  	req, err := http.NewRequest("POST", url, body)
  	if err != nil {
  		return nil, err
  	}
  	req.Header.Set("Content-Type", w.FormDataContentType())
  
  	return req, nil
  }
docs: // multipartRequest returns a new multipart POST request with a file attached.