Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

viewsource.inc 3.0KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. +-----------------------------------------------------------------------+
  4. | program/steps/mail/viewsource.inc |
  5. | |
  6. | This file is part of the Roundcube Webmail client |
  7. | Copyright (C) 2005-2016, The Roundcube Dev Team |
  8. | |
  9. | Licensed under the GNU General Public License version 3 or |
  10. | any later version with exceptions for skins & plugins. |
  11. | See the README file for a full license statement. |
  12. | |
  13. | PURPOSE: |
  14. | Display a mail message similar as a usual mail application does |
  15. | |
  16. +-----------------------------------------------------------------------+
  17. | Author: Thomas Bruederli <roundcube@gmail.com> |
  18. +-----------------------------------------------------------------------+
  19. */
  20. if (!empty($_GET['_save'])) {
  21. $RCMAIL->request_security_check(rcube_utils::INPUT_GET);
  22. }
  23. ob_end_clean();
  24. // similar code as in program/steps/mail/get.inc
  25. if ($uid = rcube_utils::get_input_value('_uid', rcube_utils::INPUT_GET)) {
  26. if ($pos = strpos($uid, '.')) {
  27. $message = new rcube_message($uid);
  28. $headers = $message->headers;
  29. $part_id = substr($uid, $pos + 1);
  30. }
  31. else {
  32. $headers = $RCMAIL->storage->get_message_headers($uid);
  33. }
  34. $charset = $headers->charset ?: $RCMAIL->config->get('default_charset');
  35. header("Content-Type: text/plain; charset={$charset}");
  36. if (!empty($_GET['_save'])) {
  37. $browser = $RCMAIL->output->browser;
  38. $subject = rcube_mime::decode_header($headers->subject, $headers->charset);
  39. $filename = rcmail_filename_from_subject(mb_substr($subject, 0, 128));
  40. $filename = ($filename ?: $uid) . '.eml';
  41. $filename = $browser->ie ? rawurlencode($filename) : addcslashes($filename, '"');
  42. header("Content-Length: {$headers->size}");
  43. header("Content-Disposition: attachment; filename=\"$filename\"");
  44. }
  45. if (isset($message)) {
  46. $message->get_part_body($part_id, empty($_GET['_save']), 0, -1);
  47. }
  48. else {
  49. $RCMAIL->storage->print_raw_body($uid, empty($_GET['_save']));
  50. }
  51. }
  52. else {
  53. rcube::raise_error(array(
  54. 'code' => 500,
  55. 'type' => 'php',
  56. 'file' => __FILE__,
  57. 'line' => __LINE__,
  58. 'message' => "Message UID $uid not found"
  59. ),
  60. true, true);
  61. }
  62. exit;
  63. /**
  64. * Helper function to convert message subject into filename
  65. */
  66. function rcmail_filename_from_subject($str)
  67. {
  68. $str = preg_replace('/[:\t\n\r\0\x0B\/]+\s*/', ' ', $str);
  69. return trim($str, " \t\n\r\0\x0B./_");
  70. }