Как заставить CodeIgniter уважать разрывы строк в сообщении при отправке электронного письма - PullRequest
3 голосов
/ 21 марта 2011

Как сделать так, чтобы codeigniter отправлял электронное письмо, соблюдая разрывы строк в поле сообщения?

форма сообщения - http://d.pr/Sae5

<?php echo form_open($this->uri->uri_string()); ?>
<table class="forms-table">
    <tr>
        <td>
            <label for="name">Name</label>
        </td>
        <td>
            <input type="text" id="name" name="name" value="<?php echo set_value('name'); ?>" />
        </td>
        <td>
            <?php echo form_error('name'); ?>
        </td>
    </tr>
    <tr>
        <td>
            <label for="email">Email</label>
        </td>
        <td>
            <input type="text" id="email" name="email" value="<?php echo set_value('email'); ?>" />
        </td>
        <td>
            <?php echo form_error('email'); ?>
        </td>
    </tr>
    <tr>
        <td>
            <label for="message">Message</label>
        </td>
        <td>
            <textarea name="message" id="message" cols="40" rows="6"><?php echo set_value('message'); ?></textarea>

        </td>
        <td>
            <?php echo form_error('message'); ?>
        </td>
    </tr>
    <tr>
        <td colspan="3">
            <input type="submit" value="submit" />
        </td>
    </tr>
</table>
<?php echo form_close(); ?>

Когда я получаю электронное письмо, я получаю "привет, я потрясающий" все в одной строке. У меня есть конфигурация newline и crlf, установленная на "\ r \ n", charset - "utf-8", и я получаю значение моего поля сообщения, используя

$message = $this->input->post('message');

...

$this->email->message($message);

есть мысли?

1 Ответ

7 голосов
/ 24 июня 2011

почему бы не отправить письмо с html?

сначала вы должны подготовить сообщение (я предполагаю, что вы используете POST)

$message = str_replace ("\r\n", "<br>", $this->input->post('message') );

или вы можете использовать нативный php способ получить $_POST

$message = str_replace ("\r\n", "<br>", $_POST['message'] );

Что вы сделали, так это заменили новые строки на <br>

Тогда вам просто нужно загрузить библиотеку и правильно установить ее через конфиг, например:

$this->load->library('email');

$config['mailtype'] = 'html';
$this->email->initialize($config);


$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');

$this->email->subject('Email Test');
$this->email->message( $message );

$this->email->send();

Вот и все! Надеюсь, это поможет,

Вы можете получить больше информации о http://codeigniter.com/user_guide/libraries/email.html Надеюсь, вы найдете время, чтобы прочитать его!


Просто добавьте, вы можете упростить этот процесс, используя nl2br и просто ->mailtype = 'html';. Вот так:

$message = nl2br($this->input->post('message')); // https://codeigniter.com/user_guide/libraries/input.html

$this->load->library('email'); // use autoload.php to remove this line
$this->email->mailtype = 'html';

Кроме того, если вы хотите создать конфигурацию для постоянного использования, вы можете создать файл конфигурации, и CI будет использовать его автоматически, поэтому вам не нужно использовать ->initialize. Для этого просто выполните следующие простые шаги:

  • в каталоге application \ config , создайте файл с именем email.php
  • Тогда вы можете просто написать в своей конфигурации этот файл примерно так:

`$config['mailtype'] = 'html';`

Viola! Вы сделали Это так просто! Теперь просто позвоните в свой класс электронной почты и используйте как обычно, без необходимости настраивать такие вещи, как mailtype. Вы можете увидеть полный список email config опций под заголовком Email Preferences здесь . Не забывайте, что вы можете использовать application \ config \ autoload.php для автоматической загрузки библиотеки email, удалив эту строку $this->load->library('email'); из вашего кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...