2015-12-11 6 views
1

Я использую retrofit и mailgun для отправки электронной почты. Я могу успешно отправить письмо с кодом, который у меня есть.Android Retrofit отправка электронной почты с приложением с помощью mailgun

Теперь я не знаю, как добавить прикрепление к почте.

Вот мой код:

private SendMailApi sendMailApi; 

public interface SendMailApi { 

    @Headers({ACCEPT_JSON_HEADER}) 
    @FormUrlEncoded 
    @POST("/messages") 
    void authUser(
      @Header("Authorization") String authorizationHeader, 
      @Field("from") String from, 
      @Field("to") String to, 
      @Field("subject") String subject, 
      @Field("text") String text, 
      Callback<MailGunResponse> cb 
    ); 
} 

public void sendMail(String to, String subject, String msg, Callback<MailGunResponse> cb){ 
    String from = "test <[email protected]>"; 
    String clientIdAndSecret = "api" + ":" + "key-*******"; 
    String authorizationHeader = BASIC + " " + Base64.encodeToString(clientIdAndSecret.getBytes(), Base64.NO_WRAP); 
    sendMailApi.authUser(authorizationHeader,from, to, subject, msg, cb); 
} 

public MailGun() { 
    RestAdapter restAdapter = getAuthAdapter(); 
    sendMailApi = restAdapter.create(SendMailApi.class); 
} 

private RestAdapter getAuthAdapter(){ 
    RestAdapter.LogLevel logLevel = RestAdapter.LogLevel.FULL; 
    if(DEBUG)logLevel = RestAdapter.LogLevel.FULL; 
    return new RestAdapter.Builder() 
      .setEndpoint(ENDPOINT) 
      .setConverter(new GsonConverter(new Gson())) 
      .setLogLevel(logLevel) 
      .build(); 
} 

Теперь я понятия не имею, где и на каком прикрепление поле должно идти. Пожалуйста, дайте мне пример, например, прикрепление изображения, когда у меня есть его путь.

Помните, что я могу успешно отправить письмо прямо сейчас без вложений.

Большое спасибо

+0

Не пробовал этот mysleft, но в соответствии с документами вложения используют multipart для отправки. Я не знаю, будет ли это работать с модификацией, но проблема в нем [здесь] (https://github.com/square/retrofit/issues/662) – DariusL

ответ

0

Удалённый пользователь сможет отправить заявку. Люди нашли способ в вопросах here и here. Он выглядит очень уродливым и, возможно, может переломиться позже, но работает над retorfit 2.0.0.

@Multipart 
@POST("messages") 
Observable<Void> send(
     @Header("Authorization") String authorizationHeader, 
     @Part("from") RequestBody from, 
     @Part("to") RequestBody to, 
     @Part("subject") RequestBody subject, 
     @Part("text") RequestBody text, 
     @Part("recipient-variables") RequestBody variables, 
     @Part("attachment\"; filename=\"image.jpg") RequestBody attachment 
    ); 


request = mailgun.send(
     MailGun.AUTH, 
     RequestBody.create(MediaType.parse("text/plain"), "from"), 
     RequestBody.create(MediaType.parse("text/plain"), "to"), 
     RequestBody.create(MediaType.parse("text/plain"), "subject"), 
     RequestBody.create(MediaType.parse("text/plain"), "message"), 
     RequestBody.create(MediaType.parse("text/plain"), "{}"), 
     RequestBody.create(MediaType.parse("image/*"), byteArray) 
); 

Проверить RequestBody.create() для других методов загрузки изображения, но все должны работать для этого. Я не знаю о text/plain, но я не смог открыть изображение без image/*.

Смежные вопросы