En lugar de hacer un echo, que lo que hace es mostrartelo por pantalla, vete guardandolo en una variable como el ejemplo que se puso mas atras, luego ya lo puedes mostrar y al final devuelves esa variable con return
Código PHP:
function imprime_carrito(){
$suma = 0;
$cadena= "<table><tr>
<td><b> Referencia </b></td>
<td><b> Descripcion </b></td>
<td> </td> </tr>";
for ($i=0;$i<$this->num_productos;$i++){
if($this->array_id_prod[$i]!=0){
$cadena.="<tr>
<td>" . $this->array_ref[$i] . "</td><td >" . $this->array_nombre_prod[$i] . "</td><td ><a class='txt' href='del_prodimag.php?linea=$i'>Eliminar</a></td></tr>";
}
}
$cadena.= "</table><a class='txt' href='del_prodimag.php?ds=1'>Vaciar</a>";
}
// aqui puedes mostrar la cadena
echo $cadena;
//ahora devolvemos la cadena para que puedas mandarla en un mail
return $cadena;
modifiqué algo tu codigo (le quité todos los estilos simplemente porque yo en lugar de \" prefiero usar ' (comilla simple) y no era plan de cambiarlo en todo los lados jaja..
por lo demas algunos errores en comillas simples y dobles que te modifique tambien..
pruebalo a ver si te vale.