2015-12-04 1 views
0

Я пытаюсь, чтобы мое приложение отправило новый пароль на один адрес электронной почты, но открывает страницу и дает сообщение «Никакие приложения не могут выполнить это действие» с заголовком «Отправить письмо» (который у меня есть, я знаю) , Зачем? Идея с новым паролем - это то, что я хочу, но сначала я хочу отправить что-либо в напечатанное письмо в edittext, чтобы проверить его. Я попытался запустить его на реальном устройстве.Как правильно использовать emailintent?

public class Glemtpassword extends AppCompatActivity implements View.OnClickListener{ 

Button nypassword; 
EditText email; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_glemtpassword); 
    nypassword = (Button) findViewById(R.id.nypassword); 
    nypassword.setOnClickListener(this); 
    email = (EditText) findViewById(R.id.email); 
} 

@Override 
public void onClick(View view) { 
    if (view == nypassword){ 
     sendEmail(); 
    } 
} 

protected void sendEmail() { 
    Log.i("Send email", ""); 
    Intent emailIntent = new Intent(Intent.ACTION_SEND); 

    emailIntent.putExtra(Intent.EXTRA_EMAIL, String.valueOf(email)); 

    try { 
     startActivity(Intent.createChooser(emailIntent, "Send mail...")); 
     finish(); 
     Log.i("Nyt password er sendt til din mail...", ""); 
    } 
    catch (android.content.ActivityNotFoundException ex) { 
     Toast.makeText(Glemtpassword.this, "Ingen email klient", Toast.LENGTH_SHORT).show(); 
    } 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.Forside) { 
     Intent intent = new Intent(this, Forside.class); 
     startActivity(intent); 
    } 
    else if (id == R.id.Logind){ 
     Intent intent = new Intent(this, LogInd.class); 
     startActivity(intent); 
    } 
    else if (id==R.id.Opretbruger) { 
     Intent intent = new Intent(this, OpretBruger.class); 
     startActivity(intent); 
    } 
    return true; 
} 
} 

EDIT:

public class Glemtpassword extends AppCompatActivity implements View.OnClickListener{ 

Button nypassword; 
EditText email; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_glemtpassword); 
    nypassword = (Button) findViewById(R.id.nypassword); 
    nypassword.setOnClickListener(this); 
    email = (EditText) findViewById(R.id.email); 
} 

@Override 
public void onClick(View view) { 
    if (view == nypassword){ 
     sendEmail(); 
    } 
} 

protected void sendEmail() { 
    Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
      "mailto", email.getText().toString(), null)); 
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
    emailIntent.putExtra(Intent.EXTRA_TEXT, "Body"); 
    startActivity(Intent.createChooser(emailIntent, "Send email...")); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 

    getMenuInflater().inflate(R.menu.menu_main, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 
    if (id == R.id.Forside) { 
     Intent intent = new Intent(this, Forside.class); 
     startActivity(intent); 
    } 
    else if (id == R.id.Logind){ 
     Intent intent = new Intent(this, LogInd.class); 
     startActivity(intent); 
    } 
    else if (id==R.id.Opretbruger) { 
     Intent intent = new Intent(this, OpretBruger.class); 
     startActivity(intent); 
    } 
    return true; 
} 
} 
+0

Проверьте это: http://stackoverflow.com/a/2033124/4350275 –

ответ

0

Вы не установили тип MIME, и вы не дали никакого содержания. Позвоните по телефону putExtra(), чтобы установить значение EXTRA_TEXT на Intent, с тем, что вы хотите видеть в теле письма. Затем вызовите setType() на Intent, чтобы указать тип MIME данных, которые вы размещаете в EXTRA_TEXT.

+0

Редактировал мой код, и теперь он дает возможность выбрать, какое приложение я хочу отправить. Мой вопрос в том, не может ли он отправить прямо из приложения? Я хочу отправить это сообщение «123» – Hudhud

+0

@ Hudhud: если вы используете 'ACTION_SEND' или' ACTION_SENDTO', пользователь может выбрать свой почтовый клиент (как может быть, несколько из них), и пользователь может выбрать не отправлять электронную почту , В конце концов, это устройство пользователя и учетная запись пользователя. Вы можете отправлять электронную почту напрямую с помощью сторонних библиотек, таких как JavaMail. Однако вам понадобится учетная запись электронной почты с ее паролем. Пользователи не захотят предоставлять вам свои пароли электронной почты и, используя ваши собственные средства, будут быстро перехватываться вашей учетной записью электронной почты тем, кто берет пароль из приложения. – CommonsWare

+0

Хорошо, тогда какой самый простой и безопасный способ отправить электронное письмо с сообщением «123»? – Hudhud

-1

this answer По

Решение должно быть:

Intent emailIntent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(
     "mailto","[email protected]", null)); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "Subject"); 
emailIntent.putExtra(Intent.EXTRA_TEXT, "Body"); 
startActivity(Intent.createChooser(emailIntent, "Send email...")); 

или как указано в документации Android вы можете использовать:

Intent intent = new Intent(Intent.ACTION_SENDTO); 
intent.setData(Uri.parse("mailto:")); // only email apps should handle this 
intent.putExtra(Intent.EXTRA_EMAIL, addresses); 
intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
+0

Загрузили отредактированную версию моего кода. Теперь он хочет, чтобы я открыл приложение, не могу ли он просто отправить напрямую? – Hudhud

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